home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / cli / okami15.lzh / OKAMI15 / DOC / OKAMI.DOC < prev    next >
Text File  |  1992-09-20  |  85KB  |  2,169 lines

  1.  
  2.         ===============================================
  3.  
  4.  
  5. @(#)      OKAMI SHELL VERSION 1.4 - BENUTZERANLEITUNG
  6.  
  7.  
  8.         ===============================================
  9.                         Stand: 19.9.1992
  10.  
  11.  
  12.  
  13.  
  14.                 BITTE ERST DIE DATEI README LESEN!
  15.  
  16.  
  17. ----------------------------------------------------------------------------
  18.  
  19.  
  20.  
  21. EINFÜHRUNG
  22.  
  23. Die Okami-Shell (man spricht es "O-Kammi")  ist ein (weiterer)  Versuch,
  24. auf  dem  Atari  ST  so etwas wie Unix-Gefühle aufkommen zu lassen.  Das
  25. Programm   wendet   sich   an   alle,    die   die  Möglichkeiten  eines
  26. Kommandointerpreters  denen  des  Desktops vorziehen.  Die Shell ist vor
  27. allem beim Betrieb mit einer Festplatte ausgesprochen nützlich. 
  28.  
  29. Obwohl  es  schon  einige Programme dieser Art gibt,  gibt es gewichtige
  30. Gründe,  die  Okami-Shell  zu  benutzen  und  sich  durch  die  folgende
  31. Anleitung zu arbeiten. 
  32.  
  33. Die  Okami-Shell ist einer der Unix-orientierten Kommandointerpreter für
  34. den  ST,   der  die Unix-Möglichkeiten der Ein/Ausgabe-Umleitung und des
  35. Pipelinings  auch für die internen (in der Shell eingebauten)  Kommandos
  36. ermöglicht.    Die   Ein/Ausgabe-Umleitung  ist  die  Möglichkeit,   die
  37. Standard-Ausgabe eines Programmes,  d.h.  alles, was mit printf, Cconout
  38. etc.  ausgegeben wird und normalerweise auf dem Bildschirm landet, sowie
  39. die  Standard-Eingabe  in  eine  Datei  oder  zu  einem Gerät (z.B.  zum
  40. Drucker)   umzuleiten.   Die  Umleitung  funktioniert  unter TOS mit dem
  41. GEM-Desktop  a)   nur  bei  TTP-Programmen,  weil man nur bei diesen die
  42. Möglichkeit  hat,   eine  Kommandozeile  einzugeben,   und  b)  nur  bei
  43. Programmen,  deren Compiler die Umleitung unterstützen.  Die Okami-Shell
  44. führt  die  Umleitung  selber  durch,  wodurch auch Programme,  die ihre
  45. Kommandozeile    nicht    beachten   (z.B.    solche,    die   mit   dem
  46. Pd-Modula-2-System erstellt wurden), umgeleitet werden können. 
  47.  
  48. Die   Okami-Shell   kann  allerdings  noch  etwas  mehr:   sie  ist  ein
  49. universelles Utility,  mit dem man nicht nur Programme starten,  sondern
  50. auch  Programme  schreiben  und debuggen usw.  kann.  Als Bonbon hat sie
  51. einen  eingebauten  UPN-Rechner  mit  ca.   80  Funktionen  sowie  einen
  52. Terminal-Emulator.   Alles  in allem bietet die Okami-Shell mehr interne
  53. Kommandos  und  Funktionen  als  jede  andere  für den Atari erhältliche
  54. Shell. 
  55.  
  56. Bei  der  Programmierung  einer  Shell  oder  eines Kommandointerpreters
  57. steht  man immer vor der Frage,  ob man für die in der Shell eingebauten
  58. Kommandos  Unix-,   MS-DOS-  oder  eine  selbstausgedachte  Schreibweise
  59. benutzen soll,  d.h.  ob man die Kommandos ls oder dir,  mv oder rename,
  60. cp  oder  copy  nennen  soll  oder  ob  man  sich  eingene Kommandonamen
  61. ausdenkt.   Die  Okami-Shell  ist  an den Unix-Bezeichnungen orientiert,
  62. genauer gesagt an dem Unix-Derivat AIX,  das z.B. auf dem IBM RT PC 6150
  63. läuft.  Natürlich müssen bei soetwas Abstriche gemacht werden, der Atari
  64. ist   schließlich   keine   Unix-Maschine,   und  eine  Shell  ist  kein
  65. Betriebssystem. 
  66.  
  67. Wer sich in Unix einigermaßen auskennt,  kann mit der Okami-Shell sofort
  68. loslegen.   Die  folgende Anleitung stellt die Verwendung der Shell dar,
  69. die  Erklärung  der  internen  Kommandos mit Syntax befindet sich in der
  70. Datei commands.doc. 
  71.  
  72. Um  die  vielen  Versionen  der Shell unterscheiden zu können,  gibt das
  73. Kommando    `ver'    eine    Information    mit    Versionsnummer    und
  74. Kompilierungszeitpunkt aus.  Zur Interpretation der Versionsnummer siehe
  75. tricks.doc. 
  76.  
  77. ----------------------------------------------------------------------------
  78.  
  79.  
  80.  
  81. SUPPORT
  82.  
  83. Die Okami-Shell ist Public Domain,  d.h.  sie kann von jedermann benutzt
  84. und  weitergegeben werden,  ohne daß jemand etwas dafür zu bezahlen hat.
  85. Wer über E-Mail zu erreichen ist,  sollte mir über das Maus- oder Usenet
  86. eine  kleine Nachricht,  evtl.  mit Kommentaren,  Anregungen und Kritik,
  87. zukommen lassen. Adresse siehe unten. 
  88.  
  89. Über den Support ist es jederzeit und für jeden möglich: 
  90. 1) die neueste Version der Shell zu bekommen, 
  91. 2) konfektionierte    Versionen    zu    erhalten,    in    denen    die
  92. Systembeschränkungen (Anzahl der Variablen,  Funktionen etc.)  verändert
  93. sind. Wer also eine Version braucht, die bis zu 2000 Variablen verwalten
  94. kann,   kann  eine solche bekommen.  Außerdem können beliebige Kommandos
  95. ausgeblendet werden,  um die Shell kleiner zu machen.  Wer also z.B. den
  96. UPN-Rechner  und  das  basep-Kommando  nicht  braucht,   kann eine Shell
  97. erhalten,   in  der  diese  Kommandos nicht enthalten sind und die somit
  98. entsprechend kürzer ist. 
  99. 3) Außerdem   ist  eine  "CLI-Only"-Version  erhältlich,   die  nur  die
  100. allerwichtigsten  Kommandos  zur  Bedienung  der  Shell  enthält.  Diese
  101. Version ist ungepackt ca.  63 KB groß (die Vollversion ca.  130 KB)  und
  102. kann auf Systemen eingesetzt werden, auf denen die wichtigsten Kommandos
  103. als externe Programme zur Verfügung stehen. 
  104.  
  105. Es  ist verboten,  die Shell zu verkaufen oder unter einem anderen Namen
  106. zu vertreiben.  Wer irgendwelche Teile des Programms oder der Quellen in
  107. eigenen  Programmen benutzen will,  darf dies tun,  solange mein Name im
  108. Programm und in der Dokumentation erwähnt wird. 
  109. Die Datei `copying' enthält genaue Hinweise zum Kopieren und Weitergeben
  110. der Shell. 
  111.  
  112. Das   Programm   wird   voll   unterstützt,   d.h.   es  wird  dynamisch
  113. weiterentwickelt,  und jeder Anwender kann bei mir jederzeit die neueste
  114. Version  bestellen.   Ebenso  stehe  ich  bei Problemen und Wünschen zur
  115. Verfügung.   Spenden  sind natürlich auch willkommen,  aber ausdrücklich
  116. nicht  Vorraussetzung  für  den Erwerb von neuen Versionen,  Anleitungen
  117. oder  sonstigen  Hilfen (dies ist allen Pd-Programmierern zur Nachahmung
  118. empfohlen). 
  119.  
  120. Meine Adresse: 
  121.         Wolfram Rösler
  122.         Augustastr. 44-46
  123.         W-5100 Aachen
  124.         Tel. +49 (0)241 534596
  125.         Mausnetz: Wolfram Rösler @ AC2
  126.         Usenet:   wr@bara.oche.de
  127.  
  128. Bitte    bei    allen    Zuschriften    die   Versionsnummer   und   das
  129. Kompilierungsdatum  der  Shell  angeben  (werden durch Eingabe von "ver"
  130. ausgegeben).   Bei  Fehlermeldungen  bitte  die  Ausgabe  von  "ver  -a"
  131. mitschicken. 
  132.  
  133. Wer  irgendwelche  Anregungen für weitere Versionen der Shell hat,  kann
  134. sich damit jederzeit an mich wenden. 
  135.  
  136. ----------------------------------------------------------------------------
  137.  
  138.  
  139.  
  140. PROGRAMMFEHLER
  141.  
  142.  
  143.         "Selbst der  umsichtigste Programmierer kommt manchmal in Situationen,
  144.         wo das Programm nicht richtig funktioniert."
  145.                          Texas Instuments, "Individuelles Programmieren"
  146.                          Handbuch zu TI 58/58C/59, 1977
  147.  
  148. Der  Software-Support deckt die Beseitigung von Fehlern in der Shell ab.
  149. Wer  einen  Fehler  findet,  sollte also nicht die Okami-Diskette in die
  150. Ecke  schmeißen  und  sich einer anderen Shell zuwenden (die hat nämlich
  151. auch   Fehler),    sondern  mir  einen  Hinweis  mit  möglichst  genauer
  152. Fehlerbeschreibung   schicken.    Wenn   man  eine  Diskette  und  einen
  153. frankierten  Rückumschlag  beilegt,  bekommt man die korrigierte Version
  154. der  Shell  sobald wie möglich zurück.  Wenn die Shell in Verbindung mit
  155. einem anderen Programm Probleme macht, sollte man dieses Programm gleich
  156. mitschicken.   Bitte  bei allen Fehlermeldungen die Ausgabe von "ver -a"
  157. mitschicken. 
  158. Natürlich  kann  ich  keine Verantwortung für irgendwelche Schäden,  die
  159. durch  die  Shell,   ihre Anwendung oder die Unfähigkeit ihrer Anwendung
  160. verursacht werden, übernehmen. Wer also unbedingt 
  161.                        df -mn | xargs rm -r {}/* 
  162. ausprobieren muß, hat das Ergebnis selber auszubaden. 
  163.  
  164. ----------------------------------------------------------------------------
  165.  
  166.  
  167.  
  168. LIEFERUMFANG
  169.  
  170.  
  171. Zur Okami-Shell gehören die folgenden Dateien: 
  172.         KERN:
  173.         sh.ttp          Das Haupt-Shellprogramm.
  174.         msh.prg         Die Microshell zum Starten als GEM-Programm.
  175.         msh.inf         Konfigurationsdatei zur Microshell.
  176.         profile         Konfigurationsdatei beim Start der Shell.
  177.         help            Textdatei mit Syntaxerklärungen.
  178.         EXTERNE KOMMANDOS:
  179.         calc.sh         Benutzerschnittstelle zum eingebauten UPN-Rechner.
  180.         format.ttp      Programm zum Formatieren von Disketten.
  181.         gem.prg         Programm zur Benutzung von Accessories.
  182.         gem.rsc         Resourcedatei dazu.
  183.         showpic.sh      Demo-Shellscript zur Anzeige von Bilddateien.
  184.         QUELLEN:
  185.         msh.c           msh.prg
  186.         gem.c           gem.prg
  187.         format.c        format.ttp
  188.         DOKUMENTATION:
  189.         readme          Grundeinführung für den Anwender.
  190.         doc\*.*        Anleitungen.
  191.         SONSTIGES:
  192.         dial.inf        Eine Beispieldatei für das dial-Kommando.
  193.         okami.pic       Das Titelbild.
  194.         okicon.rsc      Eine Resourcedatei, die drei Icons mit dem
  195.                         Okami-Logo enthält.
  196.         _index          Indexdatei für `ls -i'.
  197.  
  198. ----------------------------------------------------------------------------
  199.  
  200.  
  201.  
  202. SYSTEMANFORDERUNGEN
  203.  
  204.  
  205.         "Wie der Name unschwer erkennen läßt, besitzt der Atari 520 ST
  206.         einen enormen Hauptspeicher, nämlich ganze 512 KByte. Der eine
  207.         oder andere kann sich vielleicht schwer vorstellen, wozu dieser
  208.         Riesenspeicher benötigt wird."
  209.                                 Data Becker, "Das große GEM-Buch" (1985)
  210.  
  211. Die Okami-Shell stellt folgende Anforderungen an das System: 
  212.  
  213. Rechner
  214.  
  215.     Läuft auf jedem ST-kompatiblen Rechner. Über den Einsatz auf anderen
  216.     Rechnern mit ST-Emulator liegen noch keine Testergebnisse vor. 
  217.  
  218.  
  219. RAM
  220.  
  221.     Die Shell benötigt ca.  200 KB an Laufzeitspeicher => lauffähig auch
  222.     auf 512KB-Maschinen. Empfohlen werden allerdings 1 MB oder mehr. 
  223.  
  224.  
  225. Massespeicher
  226.  
  227.     Für  die  zum  Lauf  notwendigen  Dateien werden minimal ca.  120 KB
  228.     benötigt.  Mit allen Hilfsdateien (Microshell,  Profile,...)  werden
  229.     ca.   200  KB  benötigt.   Dazu  kommen noch die über 300 KB für die
  230.     Dokumentation. 
  231.     Die  Shell  kann  jedem  Massespeicher  betrieben  werden.  Für  die
  232.     Verwendung  des  Pipelinings ist es jedoch notwendig,  daß auf einen
  233.     Massespeicher  (nicht  notwendigerweise  den,   von  dem  die  Shell
  234.     gestartet  wurde)   geschrieben  werden kann.  Für diesen Zweck kann
  235.     auch eine eigene kleine Ramdisk verwendet werden (16-32K). 
  236.  
  237.  
  238. Bildschirm
  239.  
  240.    Läuft  in  jeder  Auflösung.   Der Betrieb in niedriger Auflösung ist
  241.    möglich, aber einige interne Kommandos gehen davon aus, das pro Zeile
  242.    80  Zeichen  zur  Verfügung  stehen (z.B.  df und hd).  Die Benutzung
  243.    dieser  Kommandos  kann  dann  zu  Störungen in der Bildschirmausgabe
  244.    führen. In keinem Fall kommt es jedoch zu einem Programmabsturz. 
  245.    Sollte  mit  jeder  Farb-  und  Schwarzweiß-Emulation  funktionieren.
  246.    Sollte  auch  mit  allen  Großbildschirm arbeiten (ungetestet mangels
  247.    Großbildschirm).   Die Shell unterstützt OverScan (siehe commands.doc
  248.    zu dem internen Kommando "overscan"). 
  249.  
  250.  
  251. Hardware
  252.  
  253.    Die Shell unterstützt Maus, Drucker und die RS232-Schnittstelle sowie
  254.    ein  Modem.   Es  werden  jedoch  keine  Geräte  außer Bildschirm und
  255.    Tastatur  unbedingt  benötigt  (auch nicht die Maus).  (Genaugenommen
  256.    werden nicht einmal Bildschirm und Tastatur unbedingt benötigt.) 
  257.  
  258.  
  259. Betriebssystem
  260.  
  261.    Die  Shell  wurde unter TOS 1.02 und 1.04 auf einem Atari 1040 ST und
  262.    Mega ST4 entwickelt und ist "sauber"  programmiert,  d.h.  es erfolgt
  263.    kein  Zugriff  auf  undokumentierte oder veränderliche Systemadressen
  264.    o.ä.   Die  Shell sollte daher mit jedem früheren und zukünftigen TOS
  265.    zusammenarbeiten. Sie arbeitet mit und unterstützt MiNT. 
  266.  
  267.  
  268. Software
  269.  
  270.    Jedes TOS-  und TTP-Programm kann von der Shell als externes Kommando
  271.    aufgerufen werden.  GEM-Programme können aufgerufen werden,  wenn die
  272.    Shell selber als GEM-Programm gestartet wird,  was z.B. der Fall ist,
  273.    wenn msh.prg zum Start der Shell benutzt wird. 
  274.    Zum  Verändern  der Konfigurationsdateien profile und msh.inf ist ein
  275.    Ascii-Editor erforderlich. 
  276.  
  277. ----------------------------------------------------------------------------
  278.  
  279.  
  280.  
  281. INSTALLATION
  282.  
  283. Die  Okami-Shell  kann  direkt  von der Diskette gestartet werden.  Siehe
  284. hierzu den folgenden Abschnitt. 
  285. Ihre  volle  Effizienz  entwickelt die Shell allerdings erst beim Einsatz
  286. von der Ramdisk oder Festplatte. 
  287.  
  288.  
  289. INSTALLATION AUF RAMDISK
  290.  
  291. Ich  empfehle  die  selbstkomprimierende  Maxidisk,   da sie die optimale
  292. Speicher  ausnutzung garantiert.  Für die Shell sollten mindestens 200 KB
  293. Maxidisk oder ca. 300 KB einer anderen Ramdisk zur Verfügung stehen. 
  294.  
  295. Für  den  vollen Betrieb der Shell sollten folgende Dateien (am besten in
  296. einen eigenen Ordner) auf die Ramdisk kopiert werden: 
  297.  
  298.         sh.ttp
  299.         profile
  300.         msh.prg
  301.         msh.inf
  302.         help
  303.         okami.pic
  304.         dial.inf
  305.         _index
  306.   in einem Unterordner namens doc:
  307.         commands.doc            <------ aus dem Anleitungsordner
  308.   in einem Unterordner namens bin:
  309.         *.sh
  310.         format.ttp
  311.         gem.prg
  312.         gem.rsc
  313.         ship.exe                 <------ für Festplattenbenutzer: das
  314.                                         ship.prg der Harddisk-Utility-Disk
  315.  
  316.  
  317.  
  318. Die  Datei  help  wird für das Shell-Kommando "help"  benutzt;  wer diese
  319. Datei  ausdruckt und neben den Rechner legt,  kann sich den Platz auf der
  320. Ramdisk  ebenfalls sparen.  Dasselbe gilt für commands.doc,  das außerdem
  321. ziemlich  viel  Platz  beansprucht.   (Auf  der  Platte -  auf dem Papier
  322. allerdings   auch,   außerdem  wird  commands.doc  für  die  Online-Hilfe
  323. benötigt.) 
  324. Die Dateien msh.prg und msh.inf gehören zusammen und werden zum Start der
  325. Shell  als  GEM-Programm  benutzt.  Wer von der Shell keine GEM-Programme
  326. starten will, braucht diese Dateien nicht. 
  327. Auf  die  externen  Kommandos  wie gem und format kann man natürlich auch
  328. verzichten, nur muß man dann u.U. etwas häufiger ins Desktop zurück. 
  329. Wer  kein  Modem  hat,   kann  mit  dem dial-Kommando nichts anfangen und
  330. braucht folglich auch kein dial.inf. 
  331. Wer  nicht  bei  jedem  Systemstart das Titelbild sehen möchte,  kann die
  332. Datei okami.pic umbenennen oder löschen. 
  333. Auch auf profile kann man verzichten,  allerdings wird die Shell dann mit
  334. den eingebauten Voreinstellungen initialisiert. 
  335. => Die einzige Datei, die man wirklich braucht, ist sh.ttp. 
  336.  
  337.  
  338. INSTALLATION AUF FESTPLATTE
  339.  
  340. Bei  der  Installation der Shell auf Festplatte kommt echtes Unix-Feeling
  341. auf,   vor  allem  wenn  man  die  Shell nach dem Systemstart automatisch
  342. starten läßt (ich empfehle zum Autostart: 
  343.         TOS 1.0: den Autostarter aus dem Data Becker-Buch "Die besten
  344.                  Tips&Tricks für Atari ST", S. 24ff.
  345.         TOS 1.2: den Autostarter "startgem.prg", der zu Superboot 6.0
  346.                  gehört, siehe PD-Journal 9/90, S. 43ff.
  347.         >= TOS 1.4: msh.prg im Desktop als Autostart-Applikation anmelden)
  348.  
  349. Mit einigen Tricks,  die im folgenden erklärt werden,  kann man sich z.B.
  350. bei  jedem  Start  der  Shell  Datum und Uhrzeit des letzten Systemstarts
  351. ausgeben  lassen oder das aktuelle Arbeitsverzeichnis so einstellen,  wie
  352. man  die  Shell zuletzt verlassen hat.  Außerdem kann man alle Programme,
  353. die man auf der Festplatte hat,  per Name starten lassen, egal in welchem
  354. Verzeichnis   man  sich  gerade  befindet,   und  es  werden  sogar  alle
  355. RSC-Dateien gefunden. 
  356. Man tippt also z.B. ein: 
  357.                              edit datei.txt 
  358. und  es  erscheint  der  Editor  mit  der  Datei  datei.txt,   egal wo im
  359. Dateisystem der Editor sich befindet. 
  360.  
  361. Für  die Shell sollte ein eigener Ordner eingerichtet werden,  in den die
  362. oben unter INSTALLATION AUF RAMDISK aufgeführten Dateien kopiert werden. 
  363.  
  364. Außerdem  ist  es sinnvoll,  Pipe-Operationen über eine Ramdisk laufen zu
  365. lassen. Siehe dazu weiter unten. 
  366.  
  367. Wenn  man  sich  die  Anleitungen  der  Shell auf die Festplatte kopiert,
  368. braucht  man die Datei commands.doc nicht noch einmal in den Shell-Ordner
  369. zu  kopieren.   Dann muß allerdings der Dateiname von commands.doc in der
  370. Shell-Variablen HELPFILE gespeichert werden. Siehe dazu weiter unten. 
  371.  
  372.  
  373. INSTALLATION IM AUTO-ORDNER
  374.  
  375. Es  ist  sehr  sinnvoll,  ein  kleines  Programm  zu  schreiben,  das  im
  376. Auto-Ordner  gestartet wird und,  wenn eine bestimmte Taste gedrückt ist,
  377. die Shell per Pexec ausführt. Wenn dies das erste Programm im Auto-Ordner
  378. ist, hat man immer die Gelegenheit, vor dem Start irgendwelcher Programme
  379. in die Shell zu gelangen und so z.B.  defekte Programme, die das korrekte
  380. Hochfahren des Systems verhindern, zu deaktivieren. Die Shell führt keine
  381. AES-Aufrufe  aus,  die beim Start aus dem Auto-Ordner zu Problemen führen
  382. würden, da zu dieser Zeit das AES noch nicht initialisiert ist. Die Shell
  383. führt AES-Aufrufe erst dann aus,  wenn der Anwender sie durch Eingabe des
  384. Kommandos  `gon'   explizit  dazu  auffordert.   Aus diesem Grund ist ein
  385. Betreiben der Shell aus dem Auto-Ordner problemlos möglich. 
  386.  
  387.  
  388. INSTALLATION IM COOKIE-JAR
  389.  
  390. Der  Cookie-Jar  ist  eine  Möglichkeit  des  Betriebssystems,   mit  der
  391. installierte  Programme  dem System ihre Anwesenheit nebst Versionsnummer
  392. mitteilen können.  Der Cookie-Jar wird erst ab TOS 1.6 vom Betriebssystem
  393. selber  benutzt,   kann  aber  bei  allen früheren TOS-Versionen auch von
  394. Programmen  installiert  werden.   Die  Okami-Shell  trägt sich unter der
  395. Kennung  "OkSh"   in  den  Cookie-Jar  ein.  Vorher installiert sie einen
  396. solchen, falls noch keiner vorhanden ist. Die Versionsnummer ist auf zwei
  397. Bytes aufgeteilt,  bei Version 1.5 steht eine 5 im niedrigsten und eine 1
  398. im nächsthöheren Byte. 
  399. Mit  dem  internen  Kommando  `cookie'  kann  der  Cookie-Jar  ausgelesen
  400. werden. Siehe hierzu commands.doc. 
  401. Wenn  die  Shell  beendet  wird,  wird  der  vorherige  Wert  wieder  als
  402. Cookiejar-Adresse  eingetragen.  Beim Beenden der Shell mit shutdown wird
  403. als Cookiejar-Adresse 0 eingetragen. 
  404.  
  405. ----------------------------------------------------------------------------
  406.  
  407.  
  408.  
  409. START DER SHELL
  410.  
  411.  
  412.  
  413. a) Direkt
  414. Die Shell wertet ihre Kommandozeile nach der folgenden Syntax aus: 
  415.  
  416.                 [-] [Flags] [[-- | -c] Cmd [Parameter]] 
  417.  
  418. Es bedeuten: 
  419.  
  420. -
  421.  
  422.    Es  wird  die  Datei  profile im aktuellen Directory geladen.  Wenn -
  423.    nicht angegeben ist,  wird keine Profile-Datei geladen. (In Unix wird
  424.    das -  als erstes Zeichen von argv[0] übergeben. Das läßt sich in TOS
  425.    nicht bewerkstelligen, also muß das - in der Kommandozeile stehen.) 
  426.  
  427.  
  428. Flags
  429.  
  430.    Beliebige  der  Flags,   die auch für das Kommando set benutzt werden
  431.    können  und  das  Verhalten der Shell global beeinflussen.  Die Flags
  432.    können  also  schon  in  der  Kommandozeile  eingestellt werden,  was
  433.    nützlich ist,  wenn kein Profile benutzt wird. Die Flags können mit +
  434.    oder - beginnen. Siehe commands.doc für weitere Details. 
  435.  
  436.  
  437. --
  438.  
  439.    Stellt  das  Ende  der  Flags dar und signalisiert,  daß die weiteren
  440.    Parameter zu `Cmd'  gehören.  --  wird nur benötigt,  wenn `Cmd'  mit
  441.    einem Minus- oder Pluszeichen beginnt. 
  442.  
  443.  
  444. -c
  445.  
  446.    Signalisiert,   daß es sich bei `Cmd'  um ein auszuführendes Kommando
  447.    (intern oder extern)  handelt. Wenn -c nicht benutzt wird, wird `Cmd'
  448.    als der Dateiname eines auszuführenden Shellscripts betrachtet. 
  449.  
  450.  
  451. Cmd
  452.  
  453.    Ein  auszuführendes  Kommando  oder  Shellscript.  Wenn Cmd angegeben
  454.    ist,   wird  die Shell nach seiner Ausführung beendet.  Wenn kein Cmd
  455.    angegeben ist, wird die Shell interaktiv. 
  456.  
  457.  
  458. Para
  459.  
  460.    Optionale Parameter für Cmd. 
  461.  
  462.  
  463. Anmerkung:  Über den Software-Support kann eine Shell bezogen werden, die
  464. sich  im  Hinblick  auf  das  übergebene  Minuszeichen  genau andersherum
  465. verhält, d.h. sie initialisiert sich mit dem Profile immer, außer es wird
  466. ein Minuszeichen übergeben. 
  467.  
  468. Beispiele: 
  469.  
  470. sh
  471.  
  472.    Die Shell wird interaktiv gestartet. Es wird kein Profile geladen. 
  473.  
  474.  
  475. sh -
  476.  
  477.    Die  Shell wird interaktiv gestartet.  Die Datei profile im aktuellen
  478.    Directory  oder  (falls  gesetzt)   die  in der Environment-Variablen
  479.    OKSH_PROFILE  angegebene  Datei  wird  geladen.  Dies ist der normale
  480.    Start der Shell. 
  481.  
  482.  
  483. sh - -i
  484.  
  485.    Die Shell wird interaktiv gestartet,  die Datei profile wird geladen,
  486.    und es wird der Insert-Modus des Zeileneditors abgeschaltet (-i). 
  487.  
  488.  
  489. sh myscript
  490.  
  491.    Die  Datei myscript wird als Shellscript ausgeführt,  danach wird die
  492.    Shell beendet. 
  493.  
  494.  
  495. sh -x myscript
  496.  
  497.    Die  Datei myscript wird als Shellscript ausgeführt,  danach wird die
  498.    Shell  beendet.   Vorher wird das Flag x gelöscht,  wodurch die Shell
  499.    beim  Start  von  Binärprogrammen  das aktuelle Verzeichnis nicht auf
  500.    das Verzeichnis einstellt, in dem die Programmdatei enthalten ist. 
  501.  
  502.  
  503. sh -L <myscript
  504.  
  505.    Das  Flag  L  wird  gelöscht,   wodurch  die  Shell Kommandos von der
  506.    Standardeingabe   (statt  mit  dem  Zeileneditor  von  der  Tastatur)
  507.    einliest.  Dadurch wird die Datei myscript ausgeführt.  Diese Art des
  508.    Startens  eines  Shellscripts  unterscheidet sich nur geringfügig von
  509.    dem  direkten Angeben des Shellscripts und kann z.B.  benutzt werden,
  510.    um Kommandos von einer Pipeline oder einer Schnittstelle auszuführen.
  511.  
  512.  
  513.  
  514. sh -c ver
  515.  
  516.    Die Shell führt das Kommando `ver' aus und terminiert. 
  517.  
  518.  
  519. b) Indirekt
  520. Die  Shell  kann  indirekt von jedem Programm aus mit der GEMDOS-Funktion
  521. Pexec  gestartet  werden.   Dies  geschieht  z.B.  beim  Aufruf  von  der
  522. Microshell.   Da  die  Shell  den  Environment-String  benutzt,   sollten
  523. Programme,   die  das  nicht  tun,   als letzten Parameter von Pexec eine
  524. (long)0 übergeben (und nicht einen Leerstring).  Wenn der Shell dabei ein
  525. Parameterstring  übergeben  wird,   so  wird  dieser wie oben beschrieben
  526. ausgeführt.  Der Parameterstring kann der Shell auch nach dem xArg-  oder
  527. ARGV-Verfahren übergeben werden. 
  528.  
  529. Wenn  die Shell als Login-Shell gestartet werden soll und es möglich sein
  530. soll,  GEM-Programme von der Shell aus zu starten,  muß die Shell mit der
  531. Microshell   (msh.prg)    gestartet   werden.    Dazu   müssen   folgende
  532. Voraussetzungen zutreffen: 
  533. 1) Im selben Directory wie sh.ttp stehen die Dateien msh.prg und msh.inf.
  534.  
  535. 2) Die Datei msh.inf enthält mindestens die folgende Zeile: 
  536.  
  537.                                 sh.ttp - 
  538.  
  539. Dann  wird  die  Shell  nach  Doppelklick  auf  msh.prg  automatisch  als
  540. Login-Shell  gestartet.   Es  können alle GEM-Programme von der Shell aus
  541. ausgeführt werden. Siehe hierzu auch msh.doc. 
  542.  
  543. Wenn  die  Shell  auf diese Weise vom Desktop aus gestartet wird,  sollte
  544. das Profile die Zeile 
  545.  
  546.                              trap cursor -v 
  547. enthalten.  Dann wird nach dem Ende der Shell automatisch der Cursor abge
  548. schaltet  (auf  dem  Desktop  stört  er  ziemlich).   Siehe  hierzu  auch
  549. commands.doc. 
  550.  
  551. c) Über den Shellpointer (_shell_p)
  552. Der  Shellpointer befindet sich in Adresse 0x4F6 und enthält einen Zeiger
  553. auf eine Funktion,  die ein ihr übergebenes Kommando ausführt.  Auf diese
  554. Weise  ist  es möglich,  aus einem von der Shell gestarteten Programm aus
  555. Shellkommandos  auszuführen,   ohne  daß die Shell nochmal geladen werden
  556. muß. Ein Beispiel für die Verwendung ist das mitgelieferte gem.prg. 
  557.  
  558. Die  Funktion,   deren  Adresse  in  0x4F6 hinterlegt wird,  hat folgende
  559. Syntax: 
  560.         int Fct(char *cmd)
  561.  
  562. `cmd'   ist  ein  String  mit dem auszuführenden Kommando.  Dies kann ein
  563. beliebiges  Shell-Kommando  sein.  Mehrere  Kommandos  können  durch  `;'
  564. verkettet  werden.  Wenn ein leerer String oder ein NULL-Zeiger übergeben
  565. wird,   arbeitet  die  Shell  im  Dialogmodus,  ansonsten  wird  nur  cmd
  566. ausgeführt. Zurückgegeben wird der Rückgabewert des Kommandos. 
  567.  
  568. Achtung:   Bei  dieser  Art  des Aufrufes wird die bereits laufende Shell
  569. ausgeführt. Das bedeutet, daß alle Shellvariablen und Shellfunktionen der
  570. laufenden  Shell  benutzt  und verändert werden können.  Die vollständige
  571. Reentranz  der  Shell  kann jedoch nicht garantiert werden.  Insbesondere
  572. sollten  mit  einer  auf diese Weise gestarteten interaktiven Shell keine
  573. externen Programme aufge rufen werden.  (was allerdings teilweise möglich
  574. ist und offenbar von dem betreffenden Programm abhängt.) 
  575.  
  576. ---------------------------------------------------------------------------
  577.  
  578.  
  579.  
  580. KONFIGURATION
  581.  
  582. Wenn  der  Shell  als einziger Parameter ein Minuszeichen übergeben wird,
  583. sucht  sie  nach  dem  Start  im aktuellen Verzeichnis eine Datei mit dem
  584. Namen  profile.   Wenn die Environment-Variable OKSH_PROFILE gesetzt ist,
  585. wird  stattdessen  die in dieser Variable angegebene Datei benutzt.  Wenn
  586. diese  Datei  vorhanden  ist,   wird  sie wie ein Shellscript (siehe dazu
  587. weiter unten)  ausgeführt. Das Profile kann eine Einschaltmeldung auf dem
  588. Bildschirm ausgeben und Shellvariablen wie z.B.  das Prompt (PS1) setzen.
  589. Außerdem  können  die  Shell-Flags eingestellt werden (siehe dazu das in-
  590. terne  Kommando  `set'  in commands.doc).  Das Profile kann alle Aktionen
  591. ausführen, die ein normales Shellscript auch ausführen kann. Siehe hierzu
  592. auch tricks.doc. 
  593.  
  594. ----------------------------------------------------------------------------
  595.  
  596.  
  597.  
  598. KOMMANDOEINGABE
  599.  
  600.  
  601.  
  602. a) Von der Tastatur
  603. Wenn  die  Shell  im  Dialogmodus  gestartet ist,  können nach dem Prompt
  604. (i.d.R.    ein   Dollarzeichen)   Kommandos   eingegeben   werden.   (Das
  605. mitgelieferte  Profile  stellt das Prompt um,  so daß im Prompt immer das
  606. augenblickliche aktuelle Directory zu sehen ist.) 
  607.  
  608. Mit  dem  internen  Kommando keydef kann jede beliebige Taste umdefiniert
  609. werden.   Das  bedeutet,  daß alle der unten angeführten Tastenfunktionen
  610. ungültig  werden  können,  wenn die jeweiligen Tasten umdefiniert werden.
  611. Die einzigen Funktionen,  die nicht umdefiniert werden können, sind ENTER
  612. und  Ctrl  Shift  Undo.  Für weitere Informationen siehe commands.doc zum
  613. Thema keydef. 
  614.  
  615. Bei der Eingabe werden folgende Sondertasten benutzt: 
  616.  
  617. Backspace
  618.  
  619.    bewegt den Cursor nach links und löscht das dort stehende Zeichen. 
  620.  
  621.  
  622. Pfeil auf
  623.  
  624.    Es  wird das zuletzt eingegebene Kommando angezeigt.  Dieses kann mit
  625.    ENTER   übernommen   oder   mit  Backspace  editiert  werden.   Durch
  626.    wiederholten   Druck  auf  Pfeil  auf  wird  das  vorletzte  Kommando
  627.    angezeigt usw.  Es werden maximal 100 Kommandos gespeichert (wer mehr
  628.    braucht,    benutze   den  Software-Support,   um  eine  entsprechend
  629.    angepaßte  Version  der  Shell  zu  erhalten.)  Diese Eigenschaft der
  630.    Eingabe nennt man "History". 
  631.  
  632.  
  633. Shift Pfeil auf
  634.  
  635.    Wie  Pfeil  auf,   aber  es  wird  die  letzte  Zeile aus der History
  636.    angezeigt,   die  mit der bisherigen Eingabe übereinstimmt.  Gibt man
  637.    also  ein  "ls "   und  drückt Shift Pfeil auf,  dann wird das letzte
  638.    ls-Kommando zurückgeholt.  Der Zeiger in der History-Liste steht dann
  639.    hinter  dieser  Zeile,  ein weiterer Druck auf Shift Pfeil Auf bringt
  640.    also das vorletzte ls-Kommando zurück usw. 
  641.  
  642.  
  643. Ctrl Pfeil auf
  644.  
  645.    Wie  Pfeil  auf  gefolgt von einem Druck auf ENTER,  es wird also das
  646.    zuletzt  eingegebene  Kommando  nicht  nur  angezeigt,  sondern  auch
  647.    ausgeführt. Geht auch zusammen mit Shift. 
  648.  
  649.  
  650. Pfeil ab
  651.  
  652.    Zeigt  das  nächste  Kommando in der History-Liste an.  Mit Pfeil auf
  653.    und  Pfeil ab kann man also in den in der History-Liste gespeicherten
  654.    Kommandos blättern. 
  655.  
  656.  
  657. Shift Pfeil ab
  658.  
  659.    Analog zu Shift Pfeil auf. 
  660.  
  661.  
  662. Ctrl Pfeil ab
  663.  
  664.    Wie Pfeil ab gefolgt von einem Druck auf ENTER,  analog zu Ctrl Pfeil
  665.    auf. 
  666.  
  667.  
  668. Shift Esc
  669.  
  670.    Dateinamen-Vervollständigung für alle Dateien, die auf ein Suchmuster
  671.    passen. Siehe unten. 
  672.  
  673.  
  674. Esc
  675.  
  676.    Dateinamen-Vervollständigung für eine Datei. Siehe unten. 
  677.  
  678.  
  679. Pfeil links/rechts
  680.  
  681.    bewegen  den  Cursor:   mit Shift zum Zeilenanfang/ende,  mit Control
  682.    jeweils  ein  Wort nach links/rechts,  sonst jeweils ein Zeichen nach
  683.    links/rechts. 
  684.  
  685.  
  686. Delete
  687.  
  688.    mit  Control:  löscht  die  Zeile  von  der  Cursorposition  bis  zum
  689.    Zeilenende. Sonst: löscht das Zeichen unter dem Cursor. 
  690.  
  691.  
  692. Shift Space
  693.  
  694.    Speichert die aktuelle Position für Pfeil rechts. Siehe unten. 
  695.  
  696.  
  697. Clr-Home
  698.  
  699.    Die Eingabezeile wird gelöscht. 
  700.  
  701.  
  702. Help
  703.  
  704.    Es  wird eine Erklärung des eingegebenen Kommandos ausgegeben.  Siehe
  705.    unten. 
  706.  
  707.  
  708. Ctrl Shift Undo
  709.  
  710.    Für  diese  Eingabezeile  wird die Tasten-Redefinition ausgeschaltet.
  711.    Die  Eingabe  verhält  sich also so,  als ob seit dem Start der Shell
  712.    keine  keydef-Kommandos  ausgeführt  worden wären.  Die Funktion wird
  713.    durch ein Klingelzeichen bestätigt. 
  714.  
  715.  
  716. Control V
  717.  
  718.    Das   nächste   eingegebene  Zeichen  wird  nicht  als  Steuerzeichen
  719.    interpretiert. Auf diese Weise kann man z.B. VT52-Sequenzen eingeben:
  720.  
  721.                             echo <ESC>E 
  722.  
  723.    geht  nicht,   da das ESC interpretiert wird (und Filename-Completion
  724.    einleitet), man muß es so eingeben: 
  725.  
  726.                         echo <Ctrl-V><ESC>E 
  727.  
  728.  
  729. Control F
  730.  
  731.    Es  erscheint eine Fileselect-Box,  der ausgewählte Dateiname wird in
  732.    die  Eingabe  übernommen.   Das  geht nur,  wenn gon aktiv ist (siehe
  733.    commands.doc zum Stichwort gon). 
  734.  
  735.  
  736. Control P
  737.  
  738.    Es  wird  eine  Hardcopy ausgeführt.  Dies geschieht durch Aufruf der
  739.    Shellfunktion  "screensave".   Die Voreinstellung dieser Funktion ist
  740.    ein  einfacher Aufruf des internen Kommandos "hardcopy",  wodurch der
  741.    Bildschirminhalt  auf  dem  Drucker  ausgegeben  wird.   In der Datei
  742.    `tricks.doc'   ist eine screensave-Funktion angegeben,  durch die die
  743.    Hardcopy in eine Datei geschrieben wird. 
  744.  
  745.  
  746. Control A
  747.  
  748.    Der  Bildschirm  wird  dunkelgeschaltet.  Nach  Druck  auf  eine  der
  749.    Shifttasten,   Control  oder  Alternate kann man weiterarbeiten.  (Um
  750.    diese  Funktion  zu  benutzen,   sollte  gon aktiv sein,  da sie dann
  751.    VDI-Funktionen benutzen kann;  wenn gon nicht aktiv ist, schreibt sie
  752.    direkt in den Bildschirmspeicher,  was bei Großbildschirm usw.  nicht
  753.    funktioniert.) 
  754.  
  755.  
  756. Alternate Space
  757.  
  758.    Es  werden  Uhrzeit  und  Datum  angezeigt,   bis die Alternate-Taste
  759.    losgelassen wird. 
  760.  
  761.  
  762. Control D
  763.  
  764.    Die Shell wird beendet. 
  765.  
  766.  
  767. Es  können  beliebige  Ascii-Codes in der Schreibweise `^ooo'  eingegeben
  768. werden, wobei ooo eine dreistellige Oktalzahl ist. Um z.B. Klingelzeichen
  769. in eine Eingabe einzubauen: 
  770.                  echo "Jetzt kommt eine Klingel: ^007" 
  771. Auf  diese  Weise  können alle VT52-Sequenzen benutzt werden.  Siehe auch
  772. `echo' in commands.doc. 
  773.  
  774.  
  775.  
  776. Dateinamen-Vervollständigung (Filename-Completion):
  777.  
  778. Die  Shell  bietet  die  Möglichkeit,   nur  einen Teil eines Dateinamens
  779. einzugeben  und  diesen  dann  zu  dem  vollen  Dateinamen expandieren zu
  780. lassen. Dazu gibt es zwei Möglichkeiten: 
  781.  
  782. 1) Nach  Druck  auf  Taste Shift-Escape wird das zuletzt eingegebene Wort
  783. zu  allen  Dateinamen  expandiert,   die  nach den Regeln der erweiterten
  784. Wildcards auf dieses Wort passen. Beispiel: 
  785.  $ cat *.c<SHIFT ESC>
  786. erzeugt 
  787.  $ cat sh.c cmds.c utl.c ...
  788.  
  789. 2)  Nach Druck auf die Taste ESC kann der Anwender aus den auf das letzte
  790. Wort  passenden  Dateien eine auswählen.  Wenn nur eine Datei paßt,  wird
  791. diese  direkt übernommen,  ansonsten kann eine Datei mit folgenden Tasten
  792. ausgewählt werden: 
  793.  
  794. Pfeil links/rechts
  795.  
  796.    die jeweils nächste/vorige Datei. 
  797.  
  798.  
  799. Pfeil auf/ab
  800.  
  801.    zum Anfang/Ende der Liste. 
  802.  
  803.  
  804. Leertaste
  805.  
  806.    Dateilänge  und  Anzahl  der  passenden  Dateien  wer den ausgegeben.
  807.    Hierbei bedeutet `4/10' die vierte Datei von insgesamt zehn. 
  808.  
  809.  
  810. Return
  811.  
  812.    der gerade angezeigte Dateiname wird übernommen. 
  813.  
  814.  
  815. ESC
  816.  
  817.    die   Auswahl   wird   abgebrochen,   die  bisherige  Eingabe  bleibt
  818.    unverändert. 
  819.  
  820.  
  821. Clr-Home
  822.  
  823.    die  Auswahl  wird  abgebrochen,  das Suchmuster wird aus der Eingabe
  824.    entfernt. 
  825.  
  826.  
  827. Help
  828.  
  829.    eine Tastenübersicht wird angezeigt. 
  830.  
  831.  
  832. Sowohl  für  Pfeil  links  als  auch  für ESC gilt,  daß die Funktion des
  833. eingegebenen  Wortes  mit  dem  Shell-Flag f verändert werden kann.  Wenn
  834. dieses  Flag  gesetzt ist (set +f),  dann stellt das eingegebene Wort ein
  835. Präfix dar,  z.B.  steht `abc'  dann für alle Dateien, deren Name mit abc
  836. anfängt.  Wenn  das  Flag  f  nicht  gesetzt  ist  (set  -f),  steht  das
  837. eingegebene Wort nur für die Dateien, die (nach den Regeln für erweiterte
  838. Wildcards)   auf  dieses Wort passen,  `abc'  steht dann also nur für die
  839. Datei abc. 
  840.  
  841. Zur Verwendung der Help-Taste: 
  842.  
  843. Mit  der Help-Taste kann jederzeit,  und zwar ohne die Eingabe zu stören,
  844. zu   einem   Kommando   die   entsprechende   Anleitung   aus  der  Datei
  845. `commands.doc'  oder einer anderen Hilfsdatei angezeigt werden.  Will man
  846. z.B.  eine Diskette formatieren,  so tippt man das Kommando "format"  ein
  847. und  überlegt dann,  wie die Parameter noch waren -  dann hilft ein Druck
  848. auf Help, und es erscheint die Anleitung zu format. 
  849. Anschließend kann die Eingabe fortgesetzt werden.  Das funktioniert auch,
  850. wenn bereits Parameter nach format eingegeben worden sind. 
  851. Wenn  man  die Help-Taste bei leerer Kommandozeile drückt,  wird man nach
  852. dem zu erklärenden Kommando gefragt. 
  853. Bei  der  Angabe  des  zu  erklärenden  Kommandos  gelten  die Regeln für
  854. erweiterte Wildcards,  d.h. mit "r*" wird das erste Kommando erklärt, das
  855. mit r beginnt usw. 
  856.  
  857. Beispiel: 
  858.  
  859. $ format A: <HELP>                                       Eingabe
  860.  
  861.  
  862. format - Formatieren von Disketten                      Ausgabe
  863. ..... (usw.)
  864.  
  865.  
  866. $ format A: *                                            weiter gehts
  867.  
  868. (In  diesem  Beispiel  steht  <HELP> für das Drücken der Help-Taste und *
  869. für die Cursor-Position am Ende. $ ist das Shell-Prompt.) 
  870.  
  871. Der  Pfadname  der Datei commands.doc muß in der Shell-Variablen HELPFILE
  872. gespeichert sein. Die Voreinstellung ist $HOME\doc\commands.doc. Wenn die
  873. Variable HELPFILE nicht gesetzt ist, wird die Datei help.txt im aktuellen
  874. Directory benutzt. 
  875.  
  876. Wenn  das  Stichwort  in  der  in  HELPFILE  angegebenen Hilfsdatei nicht
  877. gefunden wird, sucht die Shell nach einer Datei folgenden Namens: 
  878.  
  879.                              pfad\name.ext 
  880.  
  881. `pfad'   ist  einer der in der Shell-Variablen MANPATH angegebenen Pfade,
  882. und  `ext'   ist  einer  der  in  der  Shell-Variablen MANEXT angegebenen
  883. Extender.   `name'   ist das eingegebene Stichwort.  Das Suchen der Datei
  884. erfolgt  analog zum Suchen einer Programmdatei mit den Variablen PATH und
  885. SEXT/XEXT. 
  886.  
  887. Beispiel:  MANPATH=$HOME/doc, MANEXT=.doc, Eingabe: lharc. Dann sucht die
  888. Shell nach einer Datei namens $HOME/doc/lharc.doc.  Die Datei wird, falls
  889. gefunden, mit den eingebauten Kommando pg angezeigt. 
  890.  
  891. Um  möglichst  schnellen  Zugriff  auf  die  Hilfsdatei  zu  ermöglichen,
  892. erstellt die Shell nach dem Laden einen Index,  in dem die einzelnen,  in
  893. der Datei enthaltenen Kommandos verzeichnet sind.  Dieser Index wird nach
  894. der  Erstellung  in  eine  Datei  abgespeichert,   die denselben Pfad und
  895. Dateinamen  wie  die  Hilfsdatei,   aber  den  Extender  .idx  hat  (z.B.
  896. commands.idx).   Beim  nächsten  Laden  der Hilfsdatei wird der Index aus
  897. dieser   Datei  geladen,   was  besonders  bei  Festplatten  eine  enorme
  898. Beschleunigung   gegenüber   dem   Neuerstellen  des  Index  im  Speicher
  899. darstellt. 
  900. Wenn  die  Hilfsdatei  neuer  ist als die Indexdatei,  wird ebenfalls ein
  901. neuer  Index erstellt und abgespeichert.  Dadurch wird erreicht,  daß die
  902. Indexdatei  immer  zu  der Hilfsdatei paßt,  auch wenn letztere verändert
  903. wird.  Wenn man eine neue Indexdatei erstellen will,  genügt es, die alte
  904. Indexdatei zu löschen. 
  905. Die  Verwendung  einer  Indexdatei kann mit dem Shell-Flag -H unterbunden
  906. werden.  Dies ist wichtig für Diskettenbenutzer,  bei denen das Laden der
  907. Indexdatei  länger  dauert  als  die Neuerstellung des Index im Speicher.
  908. Siehe hierzu commands.doc zum Thema `set'. 
  909.  
  910. Anstelle  von  commands.doc  kann  auch  jede andere Datei als Hilfsdatei
  911. benutzt  werden.   Damit ein Kommando in der Datei erkannt wird,  muß die
  912. Datei folgende Regeln erfüllen: 
  913.  
  914. 1) Vor  dem  Text,   der  das  Kommando erklärt bzw.  der zu dem Kommando
  915. ausgegeben werden soll,  muß eine Zeile stehen, die mit fünf Minuszeichen
  916. beginnt. 
  917. 2) Direkt  nach dieser Zeile muß eine Zeile stehen,  die mit dem Kommando
  918. beginnt.   Das Kommando geht vom Anfang der Zeile bis (exkl.)  zum ersten
  919. Nicht-Buchstaben (Buchstaben sind a-z und A-Z, keine Umlaute, kein ß) und
  920. darf  maximal  10 Zeichen lang sein.  Danach können weitere Informationen
  921. stehen, die nicht beachtet werden. 
  922. 3) Der auszugebene Text beginnt mit der unter 2)  beschriebenen Zeile und
  923. geht bis zur nächsten Zeile, die mit fünf Minuszeichen beginnt (exkl.). 
  924.  
  925. Beispiel: 
  926. -----                                                           1)
  927. ls - Anzeigen von Directories                                   2)
  928.                                                                 3)
  929. (Weitere Angaben)                                               4)
  930.                                                                 5)
  931. -----                                                           6)
  932.  
  933. Bei der Eingabe von "ls <HELP>" werden die Zeilen 2) bis 5) ausgegeben. 
  934.  
  935. Natürlich  kann  man auch eine Kopie von commands.doc anfertigen und dort
  936. einige    weitere   beliebige   Informationen   eintragen,    die   unter
  937. entsprechenden Stichworten abgefragt werden können. 
  938.  
  939. Die   Ausgabe   erfolgt   wie   mit  dem  Kommando  "pg".   Siehe  hierzu
  940. commands.doc. 
  941.  
  942.  
  943.  
  944. TECHNISCHER HINWEIS
  945.  
  946. Wenn  die  Hilfsdatei im Speicher steht und von der Shell aus ein anderes
  947. Programm   gestartet   wird,   übergibt   die   Shell   diesem   in   der
  948. Environment-Variablen  _HELP_ADR  die  Adresse  eines  Pointers  auf  die
  949. geladene  Hilfsdatei.  Auf diese Weise kann eine Subshell auf die bereits
  950. geladene  Datei  zugreifen,  ohne diese selber laden zu müssen (was einen
  951. nicht unerheblichen Aufwand an Speicherplatz bedeuten würde.) 
  952. Die  Shell liest den Inhalt von _HELP_ADR direkt nach der Initialisierung
  953. der  Variablen  aus  dem  Environment und löscht danach die Shellvariable
  954. _HELP_ADR.  Beim  Aufruf  weiterer  Programme  wird  diese  Variable  nur
  955. während  der  Erstellung des Environments für das neue Programm angelegt.
  956. Die  Variable  _HELP_ADR  ist  also  für  den  Anwender der Shell niemals
  957. sichtbar, befindet sich aber im Environment aller gestarteten Programme. 
  958. Für  die Übergabe ist es notwendig,  daß noch mindestens ein Platz in der
  959. Variablentabelle frei ist. 
  960. Das Format von _HELP_ADR ist 
  961.                             0xAAAAA:0xBBBBB 
  962. ,   wobei  AAAAA  die  Adresse  eines Pointers ist (hexadezimal).  Dieser
  963. Pointer  zeigt auf den Text der geladenen Datei.  0xBBBBB ist die Adresse
  964. einer internen Indextabelle,  die die Shell zum schnellen Zugriff auf die
  965. geladenen Daten benutzt.  Diese Indextabelle ist ein Array von Strukturen
  966. des Typs 
  967.         struct
  968.         {
  969.           char Name[12];
  970.           long Offset;
  971.         } HelpIdxTyp;
  972.  
  973. `Name'  ist der Name eines Kommandos und `Offset' ist die Byte-Entfernung
  974. der  Erklärung  dieses Kommandos von dem Beginn des Textes (der durch den
  975. Zeiger  in  der Adresse 0xAAAAA angegeben wird).  Das Ende dieser Tabelle
  976. ist durch einen Eintrag mit Offset=-1L markiert. 
  977. Die angelegte Indexdatei stellt ebendiesen Array dar. 
  978. (0xAAAAA   ist   also  vom  Typ  (char  **),   während  0xBBBBB  vom  Typ
  979. (HelpIdxTyp*)  ist.)  ACHTUNG: auf keinen Fall darf der Pointer verändert
  980. werden. 
  981.  
  982.  
  983.  
  984. b) Von der Standardeingabe
  985.  
  986. Wenn  das  Flag L nicht gesetzt ist,  ist der Zeileneditor ausgeschaltet,
  987. und die Shell liest Kommandos von der Standardeingabe.  Das bedeutet, daß
  988. weder   die   Editierfunktionen   noch   die   sonstigen  Funktionen  des
  989. Zeileneditors,  wie Filename Completion,  Fileselect-Box, Help-Taste usw.
  990. zur  Verfügung  stehen.   Der Sinn dieses Modus ist,  Kommandos von etwas
  991. anderem als der Tastatur,  z.B. von einer Schnittstelle, einer Datei oder
  992. einer Pipe, einzulesen. 
  993. Um  den  Zeileneditor schon beim Start der Shell auszuschalten,  muß beim
  994. Start  von sh.ttp das Flag -L angegeben werden.  Innerhalb der Shell kann
  995. dieselbe Wirkung durch Eingabe von "set -L" erreicht werden. Mit "set +L"
  996. wird der Zeileneditor wieder eingeschaltet. 
  997. Wenn der Zeileneditor abgeschaltet ist,  kann die Shell nur durch Eingabe
  998. von "exit" oder durch Druck auf Ctrl-Z beendet werden. 
  999.  
  1000.  
  1001.  
  1002. c) Aus einer Datei
  1003.  
  1004. Es ist möglich,  Dateien zu schreiben,  die Shell-Kommandos enthalten und
  1005. diese  Dateien  Kommando  für Kommando von der Shell ausführen zu lassen.
  1006. Solche  Dateien  werden  als  Shell-Scripts  (oder in der MS-DOS-Welt als
  1007. Batch-Dateien)   bezeichnet.   Ein  Shell-Script  kann  wiederum  weitere
  1008. Scripts  ausführen  usw.,  wobei die Tiefe der Schachtelung durch den zur
  1009. Verfügung  stehenden  Speicher begrenzt ist.  Rekursive Shellscripts sind
  1010. natürlich auch möglich. 
  1011. Für  die  Kommandos  in  Shell-Scripts  gelten  dieselben  Regeln wie für
  1012. Kommandos, die über die Tastatur eingegeben werden. 
  1013. Wenn  MiNT installiert und das Shell-Flag -r gesetzt ist,  dann führt die
  1014. Shell  jedes  Shellscript in einer Subshell aus,  d.h.  die Shell kopiert
  1015. sich  selber,   und  die  Kopie  führt  das Shellscript aus.  Das hat den
  1016. Vorteil,   das Scripts set-Einstellungen,  Variablen usw.  ändern können,
  1017. ohne  diese  nachher wiederherstellen zu müssen.  Wer wenig Speicher hat,
  1018. sollte auf diese Möglichkeit allerdings besser verzichten. 
  1019. Da  das Script in einer Kopie der aktuellen Shell ausgeführt ist,  findet
  1020. es  dieselbe  Arbeitsumgebung  wie  diese Shell,  d.h.  insbesondere alle
  1021. Shellvariablen, auch wenn diese nicht exportiert sind. 
  1022. Ohne  MiNT  oder wenn das Shell-Flag -r nicht gesetzt ist führt die Shell
  1023. alle Shellscripts selber aus.  Das bedeutet, daß das Script Variablen und
  1024. sonstige Einstellungen in der ausführenden Shell verändern kann. 
  1025.  
  1026. Bei der Ausführung eines Shellscripts wird das Script erst vollständig in
  1027. den  Speicher  geladen  und  dann  im  Speicher  ausgeführt.  Das liefert
  1028. besonders      bei     der     Ausführung     von     Diskette     enorme
  1029. Geschwindigkeitsvorteile. 
  1030.  
  1031. Bei  Shellscripts  gibt es die Möglichkeit,  Programmierstrukturen wie if
  1032. und while zu benutzen,  die bei Tastatureingabe wenig Sinn machen.  Damit
  1033. ist  es  in  der  Tat  möglich,   Shellscripts zu schreiben,  die wie ein
  1034. Programm einer höheren Programmiersprache laufen. Siehe hierzu showpic.sh
  1035. und commands.doc. 
  1036.  
  1037. Es gibt vier Arten von Kommandos: 
  1038.         1) interne Kommandos,
  1039.         2) externe Kommandos,
  1040.         3) Shellfunktionen,
  1041.         4) Kommentare.
  1042.  
  1043.  
  1044.  
  1045. INTERNE KOMMANDOS
  1046.  
  1047. Ein internes Kommando ist ein Kommando, durch das eine Funktion innerhalb
  1048. der Shell ausgeführt wird,  das also in der Shell eingebaut ist.  Interne
  1049. Kommandos werden durch Eingabe ihres Namens aufgerufen. 
  1050. Genaue  Erklärungen  aller  interner Kommandos befinden sich in der Datei
  1051. commands.doc. 
  1052.  
  1053.  
  1054. EXTERNE KOMMANDOS
  1055.  
  1056. Ein externes Kommando ist nicht in der Shell eingebaut,  sondern in einer
  1057. Datei auf einer Diskette, Ramdisk oder Festplatte vorhanden. Hierbei kann
  1058. es  sich sowohl um eine ausführbare Datei (.PRG,  .TOS etc.)  als auch um
  1059. ein Shellscript handeln. 
  1060. Externe  Kommandos  können durch Eingabe des vollständigen Pfadnamens der
  1061. entsprechenden  Datei,   aber  auch durch Eingabe des Kommandonamens (des
  1062. Dateinamens  ohne  Pfad  und Extender)  gestartet werden.  Die zugehörige
  1063. Datei  wird  auf  den  Pfaden  gesucht,   die in der Shell-Variablen PATH
  1064. gespeichert sind. 
  1065. Mit  dem hash-Kommando kann der Pfad eines Kommandos der Shell mitgeteilt
  1066. werden, ohne daß er in $PATH enthalten ist. 
  1067. Externe  Kommandos können nur ausgeführt werden,  wenn ihr Datei-Extender
  1068. einem  der in den Shell-Variablen XEXT und SEXT gespeicherten entspricht.
  1069. (Es  kann  jedoch  jede  Datei,  unabhängig vom Dateinamen,  explizit als
  1070. Shellscript   oder  Binärdatei  ausgeführt  werden,   und  zwar  mit  den
  1071. Kommandos `.'  und `exec'.)  Siehe hierzu auch den Abschnitt über externe
  1072. Kommandos in commands.doc. 
  1073.  
  1074. Externen   Programmen   werden  die  Parameter  nach  dem  xArg-Verfahren
  1075. übergeben,   wenn das Shell-Flag `a'  gesetzt ist (siehe commands.doc zum
  1076. Thema   `set').    Dies  ermöglicht  die  Übergabe  von  beliebig  vielen
  1077. Parametern, während Gemdos die Parameter auf 125 Zeichen beschränkt. 
  1078. Achtung:  einige (wenige) Programme vertragen sich damit nicht und laufen
  1079. nur,  wenn die xArg-Übergabe mit `set -a'  unterbunden wird.  Dazu gehört
  1080. z.B. der Entpacker `unzip'. 
  1081.  
  1082. Wenn der Aufruf eines externen Kommandos von einem `&' gefolgt ist, z.B. 
  1083.  
  1084.                     c:/mint/getty.ttp u:/dev/tty1 & 
  1085.  
  1086. , dann wird das Programm als Hintergrundprozeß gestartet, die Shell läuft
  1087. also   weiter,    während  das  Programm  läuft.   Die  Prozeßnummer  des
  1088. Hintergrundprozesses wird auf dem Bildschirm ausgegeben. 
  1089. Die  Standardausgabe  des Programmes wird dadurch nicht umgeleitet,  d.h.
  1090. wenn   ein  Hintergrundprozeß  Ausgaben  macht,   dann  erscheinen  diese
  1091. ebenfalls  auf  dem  Bildschirm  und vermischen sich ggfs.  mit denen der
  1092. Shell.   Daher  sollte  beim  Aufruf eines Hintergrundprozesses immer die
  1093. Ausgabe umgeleitet werden, notfalls nach NULL: (oder u:/dev/null). 
  1094.  
  1095.  
  1096.  
  1097. SHELLFUNKTIONEN
  1098.  
  1099. Shellfunktionen  sind  Shellscripts,   die  resident im Speicher gehalten
  1100. werden.   Sie  haben  dieselben Eigenschaften wie Shellscripts und können
  1101. deshalb auch genauso programmiert werden.  Alles, was über die Verwendung
  1102. von Shellscripts gesagt wird, gilt auch für Shellfunktionen. 
  1103. Jede  Shellfunktion  hat  einen  Namen,   der bis zu 80 Zeichen lang sein
  1104. darf.  Groß-  und Kleinschreibung wird unterschieden,  d.h.  "hallo"  und
  1105. "Hallo" sind zwei verschiedene Shellfunktionen. 
  1106. Bei  der  Ausführung haben Funktionen die oberste Priorität,  kommen also
  1107. noch vor den internen Kommandos.  Es ist also möglich,  interne Kommandos
  1108. umzudefinieren,  indem man eine Shellfunktion mit demselben Namen anlegt.
  1109. Innerhalb   dieser   Funktion   kann   auf   das  ursprüngliche  Kommando
  1110. zugegriffen  werden,   indem  man  dem  Kommando ein Ausrufezeichen (ohne
  1111. Leerzeichen) vorstellt. 
  1112.  
  1113. Die Syntax einer Deklaration von Shellfunktionen ist: 
  1114.  
  1115.         [Funktionsname] "(" Dateiname ")"               (1)
  1116.  
  1117.  
  1118.                 oder
  1119.  
  1120.  
  1121.         Funktionsname "()"                              (2)
  1122.         "{"
  1123.           {Zeilen des Funktionsrumpfes}
  1124.         "}"
  1125.  
  1126.  
  1127.                 oder
  1128.  
  1129.  
  1130.         Funktionsname "()"                              (3)
  1131.         "{}"
  1132.  
  1133. (1) In  der  ersten  Fassung wird die angegebene Datei als Shellscript in
  1134. den  Speicher  geladen  und  unter  dem Namen der Funktion abgespeichert.
  1135. Wenn kein Funktionsname angegeben ist, wird der Basisname des Dateinamens
  1136. (ohne Extender)  als Funktionsname benutzt.  In dieser Fassung entspricht
  1137. die Shellfunktion also einem speicherresidenten Shellscript. 
  1138. Wenn  die angegebene Datei eine ausführbare Programmdatei ist,  wenn also
  1139. ihr  erstes  Wort  0x601a  ist,   wird  das  Programm  geladen  und  eine
  1140. Shellfunktion erzeugt,  die das Programm mit `exec -x' startet. Auf diese
  1141. Weise ist es möglich,  auch Binärprogramme resident im Speicher zu halten
  1142. und ohne Disketten- oder Plattenzugriffe beliebig oft zu starten. 
  1143. ACHTUNG:    Die   Vorgehensweise  dabei  beruht  auf  der  Fähigkeit  der
  1144. Gemdos-Funktion Pexec, Binärprogramme zu laden und erst zu einem späteren
  1145. Zeitpunkt unter Angabe der Basepage-Adresse zu starten. Die Dokumentation
  1146. von Atari zu diesem Feature ist kurz und eindeutig;  sie lautet:  "Finger
  1147. davon".   Nichtsdestoweniger  funktioniert  es,  aber  es  besteht  keine
  1148. Garantie,     daß    es    immer   oder   mit   allen   Programmen   oder
  1149. Betriebssystemversionen funktioniert. 
  1150.  
  1151. (2) In  der  zweiten  Fassung wird die Funktion von der Tastatur oder dem
  1152. Shellscript,   in dem die Deklaration steht,  gelesen.  Wenn bereits eine
  1153. Funktion mit dem angegebenen Namen existiert, wird sie umdefiniert. 
  1154. Wenn  der Funktionsrumpf leer ist,  wenn also die Zeilen mit `{'  und `}'
  1155. direkt aufeinander folgen, wird die Funktion gelöscht. 
  1156. In   dieser   Fassung  wird  die  Eingabe  verkürzt,   d.h.   Leerzeilen,
  1157. Kommentarzeilen und führende Leerzeichen werden nicht mit abgespeichert. 
  1158.  
  1159. (3) In der dritten Fassung wird die Funktion gelöscht.  Das geht auch mit
  1160. dem Kommando `unset Funktionsname'. 
  1161.  
  1162. Die  zweite  und  dritte  Fassung erwarten also mehr als eine Zeile.  Die
  1163. weiteren  Zeilen  der  Deklaration werden von der sog.  "Sekundäreingabe"
  1164. erwartet,   also  von  dem  Gerät oder der Datei,  von der augenblicklich
  1165. Kommandos gelesen werden (das ist nicht immer die Standardeingabe).  Wenn
  1166. es  sich  dabei um die Tastatur handelt,  erscheint als Prompt der Inhalt
  1167. der Shellvariablen PS2. 
  1168.  
  1169. ACHTUNG:   In  keinem Fall darf zwischen Funktionsname und der geöffneten
  1170. Klammer ein Leerzeichen stehen. 
  1171.  
  1172. Beispiele: 
  1173.  
  1174.  
  1175. hallo(hallo.sh)
  1176.  
  1177.    initialisiert  eine Funktion namens "hallo".  Die Funktion entspricht
  1178.    dem Shellscript hallo.sh. 
  1179.  
  1180.  
  1181. hallo (hallo.sh)
  1182.  
  1183.    ruft  das Kommando hallo mit dem Parameter (hallo.sh)  auf,  ist also
  1184.    KEINE   Deklaration  einer  Shellfunktion.   (Schuld  daran  ist  das
  1185.    Leerzeichen nach "hallo".) 
  1186.  
  1187.  
  1188. (c:/bin/test.sh)
  1189.  
  1190.    initialisiert  eine  Funktion  aus der Datei c:/bin/test.sh.  Da kein
  1191.    Funktionsname  angegeben  ist,  wird der Basisname der Datei benutzt,
  1192.    es  wird  also die Shellfunktion "test"  erzeugt.  (Nebenbei bemerkt:
  1193.    dadurch wird das interne Kommando "test" umdefiniert.) 
  1194.  
  1195.  
  1196. (c:/bin/hallo.prg)
  1197.  
  1198.    lädt  das  Programm  hallo.prg  und erzeugt eine Shellfunktion namens
  1199.    hallo,  die das geladene Programm startet.  hallo hat dabei folgenden
  1200.    Funktionsrumpf: 
  1201.                   exec -lg c:/bin/hallo.prg 0xnnnn 
  1202.    wobei  nnnn  die  beim  Laden  ermittelte  Adresse  der  Basepage von
  1203.    hallo.prg ist (hexadezimal). 
  1204.  
  1205. hallo()
  1206. {
  1207.   echo Hallo, wie gehts?
  1208.   read _
  1209.   echo Es freut mich, daß es Dir $_ geht.
  1210.   unset _
  1211. }
  1212.  
  1213.    definiert  die  Funktion `hallo'  mit dem angegebenen Funktionsrumpf.
  1214.    Die  Verwendung  von Shellvariablen ist möglich;  in diesem Fall wird
  1215.    die Variable _ (Underscore)  benutzt,  die für temporäre Verwendungen
  1216.    zur   Verfügung  steht.   Diese  Deklaration  kann  sowohl  in  einem
  1217.    Shellscript stehen als auch über die Tastatur eingegeben werden.  Bei
  1218.    Tastatureingabe erscheint das Prompt $PS2. 
  1219.  
  1220. ls()
  1221. {
  1222.   !ls -C $*
  1223. }
  1224.  
  1225.    Das interne Kommando ls wird so umdefiniert,  daß die Option -C immer
  1226.    aktiv  ist.   Dies geschieht durch Definition einer Shellfunktion mit
  1227.    Namen ls, die das interne Kommando durch !ls aufruft. 
  1228.  
  1229.  
  1230. alias ls !ls -C
  1231.  
  1232.    hat dieselbe Wirkung. 
  1233.  
  1234. hallo()
  1235. {}
  1236.  
  1237.    Die Shellfunktion hallo wird gelöscht. 
  1238.  
  1239. hallo()
  1240. {
  1241. }
  1242.  
  1243.    Dito. 
  1244.  
  1245.  
  1246. unset hallo
  1247.  
  1248.    Dito. 
  1249.  
  1250.  
  1251. ()
  1252.  
  1253.    (weder Funktions- noch Dateiname angegeben) ist ein Syntaxfehler. 
  1254.  
  1255. Mit   dem   internen   Kommando   "fcts"    kann  eine  Liste  sämtlicher
  1256. Shellfunktionen   erzeugt   werden.    Die  Definition  einer  beliebigen
  1257. Shellfunktion  kann  mit  dem  Kommando "type"  ausgegeben werden.  Siehe
  1258. hierzu commands.doc. 
  1259.  
  1260. Es  gehört zur Philosophie von Unix,  daß man an der reinen Eingabe nicht
  1261. erkennen  kann,  ob es sich bei dem eingegebenen Kommando um ein internes
  1262. Kommando, eine ausführbare Datei, ein Shellscript oder eine Shellfunktion
  1263. handelt.   Um  das  herauszufinden,  gibt es das interne Kommando `type'.
  1264. Siehe hierzu commands.doc. 
  1265.  
  1266.  
  1267. KOMMENTARE
  1268.  
  1269. Eine  Eingabe  gilt  als  Kommentar,   wenn sie mit einem Doppelkreuz (#)
  1270. beginnt  oder  wenn  sie  nur aus einer leeren Zeile besteht.  Kommentare
  1271. werden  von  der  Shell  nicht  weiter  beachtet  und  sind  nützlich zum
  1272. Dokumentieren  von Shellscripts.  Die Tastatureingabe von Kommentaren ist
  1273. zwar möglich, aber nicht unbedingt sinnvoll. 
  1274. --------------------------------------------------------------------- 
  1275.  
  1276.  
  1277. ERWEITERTE WILDCARDS
  1278.  
  1279. Die   Okami-Shell   erlaubt   für   die   Angabe   von   Dateinamen   ein
  1280. Wildcard-System,  das weit über das von Gemdos gestellte hinausgeht.  Die
  1281. einzigen Gemdos-Wildcards sind * und ?, wobei ein ein Dateiname nur einen
  1282. Stern  enthalten  darf,  und den nur am Ende von Name oder Extender.  Bei
  1283. "**"   gibt  es Probleme,  "*hallo*"  liefert nicht alle Dateinamen,  die
  1284. "hallo" enthalten usw. 
  1285. Die erweiterten Wildcards der Okami-Shell orientieren sich an denen,  die
  1286. von der Original-Unix-Shell zur Verfügung gestellt werden. Es bedeuten: 
  1287. *               beliebig viele, auch null, beliebige Zeichen.
  1288. ?               genau ein beliebiges Zeichen.
  1289. [abcd]          genau ein Zeichen, und zwar eins der in den Klammern ste-
  1290.                 henden. Es dürfen beliebig viele Zeichen angeführt sein.
  1291. [a-g]           genau ein Zeichen, und zwar a, b, ... oder g. Das Minuszei-
  1292.                 chen bedeutet also "bis".
  1293. [~abc]          genau ein Zeichen, und zwar ein beliebiges bis auf die Zei-
  1294.                 chen in den eckigen Klammern. Es dürfen beliebig viele Zei-
  1295.                 chen angeführt sein.
  1296.  
  1297.  
  1298. Der Punkt zwischen Dateiname und Extender wird dabei wie jedes andere
  1299. Zeichen behandelt, "*" paßt also auf alle Dateinamen und nicht nur auf
  1300. die ohne Extender.
  1301.  
  1302.  
  1303. Beispiele:
  1304.  
  1305.  
  1306.  
  1307. *               alle Dateinamen.
  1308. *.*             alle Dateinamen, die einen Extender haben.
  1309. *.?             alle Dateinamen, deren Extender aus genau einem Zei-
  1310.                 chen besteht.
  1311. *.[co]          alle Dateinamen mit Extender .c oder .o.
  1312. *.[~co]         alle Dateinamen außer denen mit Extender .c und .o.
  1313. [abcd]*[xyz]    alle Dateinamen, deren erstes Zeichen a, b, c oder
  1314.                 d und deren letztes Zeichen x, y oder z ist. Der
  1315.                 Punkt, der den Extender einleitet (falls vorhanden), kann
  1316.                 irgendwo dazwischen stehen.
  1317. a[0-9]          alle Dateinamen, die aus a, gefolgt von einer Ziffer be-
  1318.                 stehen, also a0, a1, ..., a9.
  1319. ??[a-z][0-9]    alle Dateinamen, die aus zwei beliebigen Zeichen,
  1320.                 gefolgt von einem Buchstaben und einer Ziffer bestehen.
  1321.  
  1322. Wenn  das Shell-Flag w nicht gesetzt ist,  sind die erweiterten Wildcards
  1323. außer  Kraft gesetzt.  Die Shell benutzt dann nur die Wildcards,  die von
  1324. TOS zur Verfügung gestellt werden. 
  1325.  
  1326. Das  Programm für den Vergleich mit erweiterten Wildcards stammt von Rich
  1327. Salz und wurde 1986 geschrieben. 
  1328.  
  1329. ---------------------------------------------------------------------------
  1330.  
  1331.  
  1332.  
  1333. FLAGS UND PARAMETER
  1334.  
  1335. Jedem  Kommando  können  Flags  und  Parameter  übergeben werden.  I.d.R.
  1336. werden Parameter benutzt,  um festzulegen, womit etwas getan werden soll,
  1337. und die Flags legen fest, wie es getan werden soll. 
  1338.  
  1339. Die Shell teilt die Eingabezeile in Worte auf.  Worte werden durch White-
  1340. space-Zeichen (Leerzeichen,  Tab,  Formfeed) getrennt. Durch doppelte (")
  1341. oder  einfache  (')   Anführungszeichen können auch Whitespace-Zeichen in
  1342. Worten benutzt werden, z.B. ist 
  1343.                                 a b c d 
  1344. vier Worte, während 
  1345.                                "a b c d" 
  1346. nur  ein  Wort  ist.  Einfache Anführungszeichen verhindern außerdem jede
  1347. Art  von Interpretation,  d.h.  innerhalb von einfachen Anführungszeichen
  1348. werden 
  1349.         * keine Shellvariablen expandiert
  1350.         * keine Slashes zu Backslash umgeformt
  1351.         * keine Escape-Sequenzen (beginnent mit ^) interpretiert
  1352.         * keine Command-Substitution ausgeführt
  1353.  
  1354.                                  $HOME 
  1355. den Inhalt der Shell-Variablen HOME und 
  1356.                                 '$HOME' 
  1357. den String $HOME. 
  1358.  
  1359. Externen  Kommandos  werden  alle  übergebenen  Flags  und  Parameter als
  1360. Kommandozeile  übergeben.   Alle  exportierten Shell-Variablen werden den
  1361. externen Kommandos im Environment übergeben. Das Betriebssystem limitiert
  1362. die  Länge  der  Kommandozeile auf maximal 125 Zeichen.  Die Übergabe von
  1363. mehr Zeichen ist durch das xArg-Protokoll möglich. Die Flags der internen
  1364. Kommandos werden i.d.R. durch ein Minuszeichen eingeleitet. Näheres siehe
  1365. commands.doc. 
  1366.  
  1367. Die  Shell  benutzt  eine Reihe eigener Flags,  die mit dem internen Kom-
  1368. mando set eingestellt werden können. Siehe hierzu commands.doc. 
  1369.  
  1370. ----------------------------------------------------------------------------
  1371.  
  1372.  
  1373.  
  1374. VERKETTETE KOMMANDOS
  1375.  
  1376. Kommandos  können  in  einer  Zeile  durch  Semikolon  getrennt angeführt
  1377. werden. Die Kommandos werden von links nach rechts ausgeführt. 
  1378.  
  1379. Wenn eine eingegebene Zeile mit einem Dach (^)  endet,  wird anstelle des
  1380. Daches die Fortsetzung der Zeile von der Sekundäreingabe eingelesen.  Das
  1381. entspricht  dem Backslash in Unix.  (In TOS ist der Backslash zum Trennen
  1382. von Datei- und Ordnernamen reserviert.) 
  1383. Beispiel: 
  1384. ec^
  1385. ho ha^
  1386. l^
  1387. lo
  1388. entspricht  "echo  hallo".  Dabei  kann  diese  Eingabe  sowohl  von  der
  1389. Tastatur als auch aus einem Shellscript oder einer Shellfunktion stammen.
  1390.  
  1391.  
  1392. ----------------------------------------------------------------------------
  1393.  
  1394.  
  1395.  
  1396. SHELLVARIABLEN
  1397.  
  1398. Eine  besondere  Art von internem Kommando ist die Zuweisung eines Wertes
  1399. an  eine  Shellvariable.   Alle Shellvariablen sind Stringvariablen.  Der
  1400. Name  einer  Shellvariablen  kann  in  beliebiger Reihenfolge Buchstaben,
  1401. Ziffern und Underscores (_) enthalten. 
  1402.  
  1403. Es können bis zu 200 Variablen angelegt werden; wer damit nicht auskommt,
  1404. benutze  den  Software-Support,   um  eine Version der Shell mit größeren
  1405. Kapazitäten  zu  erhalten.   Die  Maximalanzahl der Variablen einer Shell
  1406. kann mit "ver -l" ermittelt werden. 
  1407.  
  1408. Jede Shell-Variable hat einen Status,  der aus beliebigen (auch null) der
  1409. folgenden Eigenschaften besteht: 
  1410.  
  1411.  
  1412. USR (User)
  1413.  
  1414.    Die Variable wurde vom Benutzer angelegt oder verändert. 
  1415.  
  1416.  
  1417. SYS (System)
  1418.  
  1419.    Es  handelt sich um eine Systemvariable,  die von der Shell verwaltet
  1420.    wird.  Hierzu gehören z.B.  die Positionsparameter $0,  $1..., $#, $?
  1421.    usw. 
  1422.  
  1423.  
  1424. R/O (Read-Only)
  1425.  
  1426.    Der  Wert  der  Variablen  darf nicht verändert und die Variable darf
  1427.    nicht gelöscht werden. 
  1428.  
  1429.  
  1430. EXP (Exportiert)
  1431.  
  1432.    Die Variable befindet sich im Environment. 
  1433.  
  1434. Die  Eigenschaften  USR  und  SYS  können  nicht  beeinflußt werden.  Die
  1435. Eigenschaften  R/O  und  EXP  können  mit  den  Kommandos `readonly'  und
  1436. `export' gesetzt und gelöscht werden. Siehe hierzu commands.doc. 
  1437.  
  1438. DEKLARATION 
  1439.  
  1440. Shell-Variablen brauchen nicht deklariert zu werden. 
  1441.  
  1442. ZUWEISUNG 
  1443.  
  1444. Die  Zuweisung  eines  Wertes an eine Shell-Variable geschieht durch eine
  1445. Eingabe der Form 
  1446.                              Variable=Wert 
  1447. z.B.: 
  1448.                             NAME=Okami-Shell 
  1449.  
  1450. Es wird der String "Okami-Shell"  der Shellvariablen NAME zugewiesen.  In
  1451. Unix  ist es üblich,  Shell-Variablen in Großbuchstaben zu schreiben,  es
  1452. sind  allerdings  auch  Kleinbuchstaben möglich.  NAME und Name sind zwei
  1453. unterschiedliche  Variablen.  Auf die folgende Weise kann einer Variablen
  1454. ein leerer Wert zugewiesen werden: 
  1455.                               Variable="" 
  1456. Der  Wert  der  Variablen  wird  also gelöscht,  aber die Variable selber
  1457. bleibt bestehen. 
  1458.  
  1459. Außerdem  können  die  internes  Kommandos "read",  "fsel",  "alert"  und
  1460. "mouse"   zur  Zuweisung  von  Eingaben an Shellvariablen benutzt werden.
  1461. Siehe hierzu commands.doc. 
  1462.  
  1463. BENUTZUNG 
  1464.  
  1465. Der  Wert einer Shell-Variablen kann durch Angabe des Variablennamens mit
  1466. vorgestelltem Dollar-Zeichen angegeben werden.  In einer Eingabezeile der
  1467. Shell  werden  erst alle Variablen zu den betreffenden Werten expandiert,
  1468. bevor die Zeile ausgeführt wird.  Shell-Variablen,  an die noch kein Wert
  1469. zugewiesen wurde, werden als Leerstrings behandelt. 
  1470. Beispiele:
  1471.  
  1472.  
  1473.         NAME=Okami-Shell
  1474.         echo $NAME
  1475.  
  1476.  
  1477. erzeugt die Ausgabe "Okami-Shell".
  1478.  
  1479.  
  1480.         NAME=Okami-Shell
  1481.         echo Der Name ist $NAME und nicht anders.
  1482.  
  1483.  
  1484. erzeugt die Ausgabe "Der Name ist Okami-Shell und nicht anders."
  1485.  
  1486.  
  1487.         VAR1=$VAR2
  1488.  
  1489.  
  1490. weist der Variablen VAR1 den Wert der Variablen VAR2 zu.
  1491.  
  1492.  
  1493.         VAR1=VAR2
  1494.         VAR3=VAR1
  1495.         $VAR1=$VAR3
  1496.  
  1497.  
  1498. weist der Variablen VAR2 den String VAR1 zu (sic).
  1499.  
  1500.  
  1501.  
  1502.  
  1503. Es ist auch möglich, Shell-Kommandos an Variablen zuzuweisen und dann
  1504. ausführen zu lassen:
  1505.  
  1506.  
  1507.         CC=c:\compiler\cc.ttp
  1508.         $CC test.c
  1509.  
  1510.  
  1511. ruft das Programm c:\compiler\cc.ttp mit dem Parameter test.c auf.
  1512.  
  1513. LÖSCHEN 
  1514.  
  1515. Auf die folgende Weise werden Variablen gelöscht: 
  1516.                                Variable= 
  1517. Dies ist nicht zu verwechseln mit dem Löschen des Inhalts einer Variablen
  1518. (siehe oben).  Wenn hinter dem Gleichheitszeichen nichts steht,  wird die
  1519. Variable  vollständig gelöscht und belegt danach keinen Platz mehr in der
  1520. Variablentabelle. 
  1521. Dies  ist  notwendig,   da  die  Shell nur über eine begrenzte Anzahl von
  1522. Variablen  verfügt.   Besonders  Shell-Scripts,  die Variablen für lokale
  1523. Zwecke  benutzen,   sollten  diese  Variablen  nach  der Benutzung wieder
  1524. freigeben. Shellvariablen können außerdem mit dem Kommando unset gelöscht
  1525. werden. 
  1526. Beim  Löschen  verliert die Variable natürlich auch ihren Status.  Um den
  1527. Status  zu  erhalten,   darf  nur  der Wert der Variablen gelöscht werden
  1528. (NAME=""). 
  1529.  
  1530. Beispiele: 
  1531.  
  1532.  
  1533. NAME=
  1534.  
  1535.    Die Shell-Variable NAME wird gelöscht. 
  1536.  
  1537.  
  1538. unset NAME
  1539.  
  1540.    Ebenso. 
  1541.  
  1542. SAVECWD=$CWD
  1543. cd c:\work\test
  1544. .......................(weitere Kommandos)
  1545. cd $SAVECWD
  1546.  
  1547.    Das aktuelle Verzeichnis (das stets in der Variablen CWD steht)  wird
  1548.    in  der  Variablen  SAVECWD  gesichert.   Danach  wird  das  aktuelle
  1549.    Verzeichnis geändert (mit dem internen Kommando "cd"),  und es werden
  1550.    weitere   Kommandos   ausgeführt.   Anschließend  wird  das  aktuelle
  1551.    Verzeichnis wieder restauriert. 
  1552.    Diese  Technik sollte von allen Shellscripts benutzt werden,  die das
  1553.    aktuelle Verzeichnis ändern. Unter Unix werden Shellscripts stets von
  1554.    Subshells   ausgeführt,    und  das  aktuelle  Verzeichnis  ist  eine
  1555.    Eigenschaft  eines  Prozesses,  weswegen  Shellscripts  das  aktuelle
  1556.    Verzeichnis   ändern  können,   ohne  das  aktuelle  Verzeichnis  der
  1557.    aufrufenden  Shell  zu  beeinflussen.   Die Okami-Shell benutzt keine
  1558.    Subshells, und daher kann jedes Shell script das aktuelle Verzeichnis
  1559.    der  Shell  ändern,   was  in  der  praktischen Anwendung nicht immer
  1560.    erwünscht ist. 
  1561.    Das   umständliche   Speichern   und   Restaurieren   des   aktuellen
  1562.    Verzeichnisses  entfällt,  wenn die Shell-Flags x und c gesetzt sind.
  1563.    Siehe hierzu das interne Kommando `set' in commands.doc. 
  1564.  
  1565.  
  1566. SYSTEMVARIABLEN 
  1567.  
  1568. Eine  Reihe  von  Shellvariablen werden von der Shell selber angelegt und
  1569. benutzt.  Es ist teilweise möglich,  die Werte dieser Variablen zu verän-
  1570. dern. Diese sind: 
  1571.  
  1572.  
  1573. OKSH_PROFILE
  1574.  
  1575.    Das  beim  Start der Shell zu landende Profile.  Muß folglich bereits
  1576.    beim  Start der Shell im Environment vorhanden sein und hat von da an
  1577.    keine Bedeutung für die Shell mehr. 
  1578.  
  1579.  
  1580. PS1
  1581.  
  1582.    Das   Eingabeprompt.    Kann   vom  Anwender  verändert  werden  (was
  1583.    normalerweise im Profile geschieht). Der Defaultwert ist " $ ". 
  1584.  
  1585.  
  1586. PS2
  1587.  
  1588.    Das  sekundäre  Eingabeprompt.   Erscheint  z.B.  bei der Eingabe von
  1589.    Shellfunktionen.  Kann beliebig verändert werden, der Defaultwert ist
  1590.    "> ". 
  1591.  
  1592.  
  1593. OKAMISHELL
  1594.  
  1595.    Die Versionsnummer der Shell. Kann nicht verändert werden. 
  1596.    Diese  Variable  wird nicht an gestartete Programme weitergegeben und
  1597.    ist  deshalb  nur  in  Shellscripts  gesetzt,   wenn  diese unter der
  1598.    Okami-Shell  laufen.   Daher  kann das Vorhandensein dieser Variablen
  1599.    als  Test  benutzt werden,  ob ein Shellscript unter der Okami-  oder
  1600.    einer anderen Shell ausgeführt wird. 
  1601.  
  1602.  
  1603. TERM
  1604.  
  1605.    Der  Rechnertyp,  wird anhand des _MCH-Cookies eingestellt und ist je
  1606.    nachdem  "Atari ST",  "Atari Mega ST",  "Atari STE"  oder "Atari TT".
  1607.    Wenn   kein   Cookie-Jar  installiert  ist,   wenn  kein  _MCH-Cookie
  1608.    vorhanden  ist  oder wenn dessen Wert kleiner als 0 oder größer als 3
  1609.    ist,  wird "Atari ST"  benutzt.  TERM ist in der jetzigen Version der
  1610.    Shell  noch  ohne  weitere Bedeutung,  wird aber von einigen Program-
  1611.    men   benutzt,    die  eine  Unix-ähnliche  Termcap  verwenden  (z.B.
  1612.    Gnu-Emacs)   und sollte dann auf den entsprechenden,  von der Termcap
  1613.    benötigten Wert (z.B. "st" oder "vt52") eingestellt werden. 
  1614.  
  1615.  
  1616. CWD
  1617.  
  1618.    Das aktuelle Verzeichnis.  Wird nach jedem Wechsel des Verzeichnisses
  1619.    automatisch  aktualisiert und sollte nicht von Hand verändert werden.
  1620.    (Durch   eine   Zuweisung   an   diese  Variable  wird  das  aktuelle
  1621.    Verzeichnis nicht geändert.) 
  1622.  
  1623.  
  1624. HOME
  1625.  
  1626.    Das  Verzeichnis,   aus dem die Shell gestartet wurde (genauer gesagt
  1627.    das  aktuelle  Verzeichnis zum Zeitpunkt des Starts der Shell).  Kann
  1628.    nach Bedarf verändert werden. 
  1629.  
  1630.  
  1631. ETC
  1632.  
  1633.    Das Verzeichnis, in dem die Shell Hilfsdateien wie z.B. die Textdatei
  1634.    für das help-Kommando erwartet.  Wird bei Programmstart auf denselben
  1635.    Wert wie HOME eingestellt und kann beliebig verändert werden. 
  1636.  
  1637.  
  1638. SHELL
  1639.  
  1640.    Hier  soll der vollständige Aufrufpfad des Shellprogramms eingetragen
  1641.    sein.   Da  die  Shell  diesen  nicht  mit völliger Sicherheit selber
  1642.    bestimmen  kann,   wird hier $HOME\sh.ttp eingetragen.  Kann beliebig
  1643.    angepaßt werden,  wenn diese Angabe einmal nicht zutrifft. Wird nicht
  1644.    von der Shell,  aber von einigen Programmen benutzt (z.B. Micro-Emacs
  1645.    oder  Pure  C).   Wer  ein neues Programm schreibt,  sollte die Shell
  1646.    lieber über den _shell_p-Zeiger aufrufen. 
  1647.  
  1648.  
  1649. PAGELEN
  1650.  
  1651.    Die  Anzahl  der  Zeilen  auf  dem Bildschirm.  Wird von dem internen
  1652.    Kommando pg (bzw.  more)  benutzt.  Kann beliebig eingestellt werden.
  1653.    Die Defaulteinstellung ist 23. 
  1654.  
  1655.  
  1656. PIPDIR
  1657.  
  1658.    Das  Laufwerk und der Pfad,  auf dem die Hilfsdateien von Pipelining,
  1659.    Command   Substitution   usw.   erzeugt   werden.   Muß   auf   einem
  1660.    beschreibbaren  Laufwerk  (am besten auf einer Ramdisk)  liegen.  Die
  1661.    Defaulteinstellung ist $HOME. Kann beliebig verändert werden. 
  1662.  
  1663.  
  1664. NULL
  1665.  
  1666.    Der  Name  des  Gerätes oder der Datei,  an die die Ausgaben geleitet
  1667.    werden,  die zum Null-Gerät (NULL:) umgeleitet werden. Kann verändert
  1668.    werden.  Die Defaulteinstellung ist "PRN:"  (paralelle Schnittstelle)
  1669.    oder "u:\dev\null", wenn MiNT installiert ist. 
  1670.    Wer MiNT nicht benutzt und einen Drucker hat,  sollte hier eine Datei
  1671.    z.B. auf der Ramdisk eintragen. Die Einstellung AUX: für die serielle
  1672.    Schnittstelle  ist  nicht  möglich,   da  diese Schnittstelle von der
  1673.    Standard-Fehlerausgabe belegt ist. 
  1674.    (Und   was   lernen   wir   daraus?   So  schnell  wie  möglich  MiNT
  1675.    installieren.) 
  1676.  
  1677.  
  1678. PATHSEP
  1679.  
  1680.    Die  Zeichen,  die als Trennzeichen in den Variablen PATH,  XEXT usw.
  1681.    gelten sollen. Die Voreinstellung ist ",;", was bedeutet, daß in PATH
  1682.    usw.   einzelne  Felder  mit  Kommata oder Semikolons getrennt werden
  1683.    können.  Wenn in MiNT nur das unifizierte Dateisystem auf Laufwerk U:
  1684.    benutzt,   kann  in  PATHSEP  auch  den Doppelpunkt eintragen und die
  1685.    Felder in PATH wie in Unix mit Doppelpunkten trennen. 
  1686.  
  1687.  
  1688. XEXT
  1689.  
  1690.    Eine  Liste  von durch die in $PATHSEP angeführten Zeichen getrennten
  1691.    Extendern.   Dateien  mit einem der hier aufgeführten Extender können
  1692.    als  Binärprogramme  gestartet  werden.  Die  Defaulteinstellung  ist
  1693.    ".prg,.tos,.ttp,.app".  Die  Punkte  vor  den  Extendern  müssen  mit
  1694.    angegeben werden. Kann beliebig verändert werden. 
  1695.  
  1696.  
  1697. SEXT
  1698.  
  1699.    Eine  Liste  von durch die in $PATHSEP angeführten Zeichen getrennten
  1700.    Extendern.   Dateien  mit einem der hier aufgeführten Extender können
  1701.    als Shellscripts gestartet werden.  Die Defaulteinstellung ist ".sh".
  1702.    Die  Punkte  vor  den  Extendern  müssen  mit angegeben werden.  Kann
  1703.    beliebig verändert werden. 
  1704.  
  1705.  
  1706. GEXT
  1707.  
  1708.    Eine  Liste  von durch die in $PATHSEP angeführten Zeichen getrennten
  1709.    Extendern.   Binärdateien  mit  einem  der hier aufgeführten Extender
  1710.    werden  als  GEM-Programme,  d.h.  nicht  direkt,  sondern  über  die
  1711.    Shellfunktion  gemexec  gestartet.   Siehe  hierzu den Abschnitt über
  1712.    gemexec  in  commands.doc.   Die Defaulteinstellung ist ".prg".  Kann
  1713.    beliebig verändert werden. 
  1714.    Wie  in  commands.doc  erklärt,   müssen die Extender nicht unbedingt
  1715.    denen von ausführbaren Programmdateien entsprechen. 
  1716.  
  1717.  
  1718. MANEXT
  1719.  
  1720.    Eine  Liste  von durch die in $PATHSEP angeführten Zeichen getrennten
  1721.    Extendern. Dateien mit einem der hier angeführten Extender werden von
  1722.    der  Online-Hilfe  mit  der  Helptaste  oder  dem  Kommando  man  als
  1723.    Anleitungsdateien  erkannt.   Die  Voreinstellung lautet ".doc,.man".
  1724.    Kann beliebig verändert werden. 
  1725.  
  1726.  
  1727. PATH
  1728.  
  1729.    Eine  Liste  von durch die in $PATHSEP angeführten Zeichen getrennten
  1730.    Pfaden.   Bei  der Eingabe eines externen Kommandos ohne vollständige
  1731.    Pfadangabe wird die Datei auf den hier angegebenen Pfaden gesucht. 
  1732.    Die  Defaulteinstellung  ist  ".,..,$HOME,$HOME\bin".   Kann  beliebg
  1733.    verändert werden. 
  1734.  
  1735.  
  1736. CDPATH
  1737.  
  1738.    Eine  Liste  von durch die in $PATHSEP angeführten Zeichen getrennten
  1739.    Pfaden.   Beim  Wechsel  des aktuellen Arbeitsverzeichnisses mit "cd"
  1740.    wird,   wenn  der  bei  cd  angegebene Pfad nicht existiert und nicht
  1741.    absolut  angegeben  ist,  auf  den  in  CDPATH  gespeicherten  Pfaden
  1742.    gesucht.  Die Defaulteinstellung ist "..,\".  Kann beliebig verändert
  1743.    werden. 
  1744.  
  1745.  
  1746. MANPATH
  1747.  
  1748.    Eine  Liste  von durch die in $PATHSEP angeführten Zeichen getrennten
  1749.    Pfaden.  Auf diesen Pfaden sucht die Online-Hilfe (Helptaste oder das
  1750.    Kommando  `man')  nach Anleitungsdateien.  Die Defaulteinstellung ist
  1751.    "$HOME\doc". Kann beliebig verändert werden. 
  1752.  
  1753.  
  1754. HELPFILE
  1755.  
  1756.    Der  Name der Datei,  aus der die Erklärungen,  die bei Druck auf die
  1757.    Help-Taste  ausgegeben  werden,  stehen.  Die Default einstellung ist
  1758.    "$HOME\doc\commands.doc". Kann beliebig verändert werden. 
  1759.  
  1760.  
  1761. CLIPDIR
  1762.  
  1763.    Enthält den Pfad des GEM-Clipboards. Wird durch die Kommandos gon und
  1764.    clipb  initalisiert,  die  Voreinstellung  bei  Programmstart  lautet
  1765.    "X:\scrapdir\scrap.*",  wobei X: das Bootlaufwerk ist. Diese Variable
  1766.    sollte nur mit dem Kommando clipb verändert werden. Siehe hierzu auch
  1767.    commands.doc. 
  1768.  
  1769.    Enthält  bei Eingabe eines Kommandos den Namen des Kommandos und beim
  1770.    automatischen  Aufruf der Funktion gemexec den vollständigen Pfad des
  1771.    aufzurufenden Programms. 
  1772.  
  1773.  
  1774. 1
  1775.  
  1776.    Enthält den ersten Parameter der Eingabezeile. 
  1777.  
  1778.  
  1779. 2
  1780.  
  1781.    Enthält den zweiten Parameter der Eingabezeile usw. 
  1782.  
  1783.  
  1784. #
  1785.  
  1786.    Enthält die Anzahl der Parameter der Eingabezeile. 
  1787.  
  1788.  
  1789. *
  1790.  
  1791.    Enthält die vollständige Eingabezeile. 
  1792.  
  1793.  
  1794. ?
  1795.  
  1796.    Enthält den Rückgabewert des zuletzt ausgeführten Kommandos. 
  1797.  
  1798. Die  folgenden Shellvariablen werden nur von einzelnen internen Kommandos
  1799. benutzt. 
  1800.  
  1801.  
  1802. COLUMNS
  1803.  
  1804.    von `scr': Anzahl der Zeilen auf dem Bildschirm. 
  1805.  
  1806.  
  1807. DIALPREFIX
  1808.  
  1809.    für `dial': Präfix des Modem-Wählkommandos. 
  1810.  
  1811. Nach dem Start der Shell werden Variablendefinitionen aus dem Environment
  1812. gelesen  und  ausgeführt.   Auf  diese  Weise können alle Variablen (auch
  1813. LOGNAME usw.) geändert, aber keine gelöscht werden. 
  1814.  
  1815. ----------------------------------------------------------------------------
  1816.  
  1817.  
  1818.  
  1819. EIN/AUSGABE-UMLEITUNG
  1820.  
  1821.  
  1822.  
  1823. 1) Für interne Kommandos
  1824.  
  1825. Die Eingabe,  Ausgabe und Fehlerausgabe jedes internen Kommandos kann auf
  1826. einfache Weise in bzw.  aus einer beliebigen Datei oder zu bzw. von einem
  1827. Gerät umgeleitet werden. 
  1828.  
  1829. Folgende Umleitungsmöglichkeiten stehen zur Verfügung: 
  1830.  
  1831.  
  1832. <Datei
  1833.  
  1834.    Umleitung der Eingabe 
  1835.  
  1836.  
  1837. >Datei
  1838.  
  1839.    Umleitung der Ausgabe, die Datei wird vorher gelöscht 
  1840.  
  1841.  
  1842. >>Datei
  1843.  
  1844.    Umleitung der Ausgabe, sie wird an die Datei angehängt 
  1845.  
  1846.  
  1847. 2>Datei
  1848.  
  1849.    Umleitung der Fehlerausgabe, die Datei wird vorher gelöscht 
  1850.  
  1851.  
  1852. 2>>Datei
  1853.  
  1854.    Anhängen der Fehlerausgabe an die Datei 
  1855.  
  1856. Anstelle von "Datei" können auch die folgenden Geräte angegeben sein: 
  1857.         CON:            Konsole (Default)
  1858.         PRN:            parallele Schnittstelle (Drucker)
  1859.         AUX:            serielle RS232-Schnittstelle (Modem)
  1860.         NULL:           ignorieren
  1861.  
  1862. Das  Gerät  NULL:,   auch Null-Gerät genannt (in Unix:  /dev/null),  wird
  1863. nicht  vom  Betriebssystem  des  ST  unterstützt,   sondern von der Shell
  1864. simuliert.    Der   Zweck  eines  Null-Gerätes  ist,   die  Ausgabe  oder
  1865. Fehlerausgabe  eines  Kommandos zu unterdrücken.  Die Shell-Variable NULL
  1866. gibt an, wo die Ausgabe, die an NULL: umgeleitet wird, tatsächlich landen
  1867. soll.   Normalerweise  ist  das die Druckerschnittstelle;  wenn diese von
  1868. einem  Drucker  belegt ist,  sollte man eine reguläre Datei z.B.  auf der
  1869. Ramdisk angeben (NULL=G:/null). 
  1870. Wer  MiNT benutzt,  hat damit keine Probleme,  da MiNT ein Null-Gerät zur
  1871. Verfügung  stellt.   Unter  MiNT  sollte  man  NULL  auso auf u:/dev/null
  1872. einstellen (was die Shell beim Starten automatisch tut). 
  1873.  
  1874. Beispiel: 
  1875.  
  1876.                                 rm *.dup 
  1877.  
  1878. löscht  sämtliche  dup-Dateien,   gibt aber eine Fehlermeldung aus,  wenn
  1879. keine  solchen  Dateien  vorhanden  sind  oder  wenn sie schreibgeschützt
  1880. sind.   Um  die  Fehlermeldung  zu  unterdrücken,  kann  man  stattdessen
  1881. schreiben: 
  1882.                             rm *.dup 2>NULL: 
  1883.  
  1884. Dadurch   werden   die   Fehlermeldungen   an  das  Null-Gerät  geleitet.
  1885. (Nebenbei: bei Verwendung von 
  1886.                               rm -f *.dup 
  1887. werden  auch  keine  Fehlermeldungen ausgegeben,  allerdings werden damit
  1888. auch schreibgeschützte Dateien gelöscht.) 
  1889.  
  1890. Wenn  keine  Umleitung  angegeben ist,  geht die Eingabe von der Tastatur
  1891. und  die Ausgabe und Fehlerausgabe zum Bildschirm,  genauer gesagt zu der
  1892. Standard-Ein-   und  -Ausgabe der Shell selber (die beim Start von sh.ttp
  1893. angegeben werden kann). 
  1894.  
  1895.  
  1896. PIPELINING
  1897.  
  1898. Die  Idee des Pipelining ist es,  die Ausgabe eines Kommandos zur Eingabe
  1899. des  nächsten  zu  machen.   So  schreibt  z.B.  das memex-Kommando einen
  1900. Speicherbereich  auf  seine  Ausgabe,   und  das  hd-Kommando fertigt von
  1901. seiner Eingabe ein Hexdump an.  Mit dem Pipelining können beide Kommandos
  1902. verbunden werden, d.h. man bekommt ein Hexdump eines Speicherauszuges. 
  1903. Um  zwei Kommandos in einer Pipeline zu verbinden,  wird zwischen sie ein
  1904. senkrechter Strich (|), auch Pipe genannt, gesetzt, z.B.: 
  1905.  
  1906.                              hd sh.ttp | pg 
  1907.  
  1908. Die  Ausgabe  des hd-Kommandos (ein langer Hexdump)  wird zur Eingabe des
  1909. pg-Kommandos,   wodurch  der  Hexdump  seitenweise  angezeigt  wird.  Die
  1910. Schreibweise  a | b ist äquivalent zu:  (a und b sind beliebige Kommandos
  1911. incl. ihren Parametern) 
  1912.  
  1913.         TMP=$PIPDIR\pip$$
  1914.         a > $TMP
  1915.         chmod +h $TMP
  1916.         b < $TMP
  1917.         rm $TMP
  1918.         unset TMP
  1919.  
  1920. (mit  drei  kleinen  Unterschieden:   1.  zum  Bilden  eines  eindeutigen
  1921. Dateinamens  wird nicht $$,  sondern ein anderer Zähler benutzt,  2.  die
  1922. Datei wird nach dem Anlegen und nicht erst nach dem Ende von a unsichtbar
  1923. gemacht und 3. es wird keine Shellvariable benutzt.) 
  1924. Dies  ist  ein  wesentlicher  Unterschied zu Unix,  wo alle an einer Pipe
  1925. beteiligten Kommandos (Prozesse)  gleichzeitig laufen.  Eine Pipeline ist
  1926. unter Unix eine Einrichtung des Betriebssystems,  die von der Okami-Shell
  1927. nur  simuliert  wird.   (Wie  gesagt,  Okami  ist  eine  Shell  und  kein
  1928. Betriebssystem.) 
  1929.  
  1930. Das  Laufwerk  und  der Ordner,  auf dem die Pipe-Dateien erzeugt werden,
  1931. kann   mit   der   Shellvariablen   PIPDIR   eingestellt   werden.    Die
  1932. Defaulteinstellung  beim  Start der Shell ist $HOME.  Dadurch bietet sich
  1933. die  Möglichkeit,   die Pipe-Dateien auf ein schnelles Laufwerk zu legen,
  1934. z.B. auf eine Ramdisk oder eine wenig benutzte Partition der Festplatte. 
  1935. VORSICHT:   Wenn  $PIPDIR  auf  einen  nicht  existierenden  Ordner  oder
  1936. Laufwerk  eingestellt  ist,  erscheinen anstelle von Pipe-Operationen nur
  1937. Fehlermeldungen der Form: 
  1938.  
  1939.                      Error: cannot open .....\pip3 
  1940.  
  1941. (Anstelle von ...... steht der Inhalt von PIPDIR.) 
  1942. In  diesem  Fall  wird  keins  der  an  einer  Pipe beteiligten Kommandos
  1943. ausgeführt. 
  1944. Abhilfe schafft das Kommando 
  1945.  
  1946.                            mkdir -r $PIPDIR/ 
  1947.  
  1948. im  Profile  nach  dem  Einstellen  von  PIPDIR.   Dadurch werden alle zu
  1949. $PIPDIR gehörenden Unterverzeichnisse erzeugt. 
  1950.  
  1951. Die Pipe-Datei kann mit folgendem Kommando sichtbar gemacht werden: 
  1952.  
  1953.                         ls -a $PIPDIR\pip* | cat 
  1954.  
  1955.  
  1956. INLINE-DOKUMENTE
  1957.  
  1958. Als   Inline-    oder   Hier-Dokument   wird   eine   spezielle  Art  der
  1959. Eingabeumleitung  bezeichnet,   bei  der  die einem Kommando zuzuführende
  1960. Eingabe  direkt  von  der  Eingabe  oder  z.B.  dem  Shellscript  stammt.
  1961. Beispiel: 
  1962.  
  1963.         cat <<eof
  1964.         Das ist ein Text, der
  1965.         zu der Eingabe des cat-
  1966.         Kommandos wird.
  1967.         eof
  1968.  
  1969. Diese  Zeilen  können  von  der  Tastatur eingegeben,  aber auch in einem
  1970. Shellscript oder einer Shellfunktion stehen. 
  1971. Die  Shell betrachtet die Zeichenkette nach "<<"  als Terminierungsstring
  1972. und schreibt die nachfolgenden Zeilen in eine Datei, die dann als Eingabe
  1973. des  Kommandos  benutzt  wird.  Das Inline-Dokument wird durch eine Zeile
  1974. beendet,    die   nur   (bis   auf   führende   Leerzeichen)    aus   dem
  1975. Terminierungsstring besteht. 
  1976. Wenn den << direkt ein Minuszeichen folgt, also z.B. 
  1977.  
  1978.                                cat <<-eof 
  1979.  
  1980. ,   werden  alle  führenden  Leerzeichen der Eingabezeilen entfernt.  Das
  1981. Minuszeichen gehört nicht zu dem Terminierungsstring. 
  1982. Die Shell führt auf allen eingelesenen Zeilen Variablensubstitutionen und
  1983. Command Substitution aus. 
  1984.  
  1985. Inline-Dokumente sind sinnvoll in Shellscripts,  die mehrzeilige Ausgaben
  1986. erzeugen  sollen,   wodurch  sich  Reihen  von  echo-Kommandos  vermeiden
  1987. lassen. 
  1988.  
  1989.  
  1990.  
  1991. 2) Für externe Kommandos
  1992.  
  1993. Theoretisch funktionieren sämtliche Ein/Ausgabe-Umleitungen inklusive der
  1994. Pipeline  auch  mit  externen  Kommandos.   In der Praxis jedoch erlauben
  1995. nicht  alle  Programme  diese  Möglichkeit,   z.B  weil  sie Tastatur und
  1996. Bildschirm  direkt über die entsprechenden Bios-Funktionen (Bconout etc.)
  1997. ansprechen,   die sich nicht umleiten lassen.  (Mit MiNT lassen sich auch
  1998. solche Programme umleiten.) 
  1999. Die Okami-Shell leitet die Ein/Ausgabe auf Gemdos-Basis um, was bedeutet,
  2000. daß  alle  Programme,  die für die Ein/Ausgabe Gemdos-Funktionen (Cconout
  2001. etc.)   benutzen,   umgeleitet  werden  können.   C-Programme,   die  die
  2002. Standard-Streams stdin und stdout benutzen,  werden normalerweise korrekt
  2003. umgeleitet. 
  2004. GEM-Programme sind von vornherein gegen jede Art der Umleitung immun,  da
  2005. sie den Bildschirm über den entsprechenden VDI-Gerätetreiber ansprechen. 
  2006.  
  2007. ----------------------------------------------------------------------------
  2008.  
  2009.  
  2010.  
  2011. COMMAND SUBSTITUTION
  2012.  
  2013. Die  Okami-Shell  bietet die Möglichkeit,  die Ausgabe eines Kommandos in
  2014. eine Kommandozeile einzubauen.  Möchte man z.B. eine Ausgabe wie "Es sind
  2015. ...   Bytes frei"  erzeugen,  in die die Anzahl der freien Bytes (die mit
  2016. dem  Kommando  mem ermittelt werden kann)  eingebaut sind,  dann kann die
  2017. Ausgabe von mem auf folgende Weise in das echo-Kommando eingebaut werden:
  2018.  
  2019.  
  2020.                      echo Es sind `mem` Bytes frei. 
  2021.  
  2022. Alles,   was in einer Eingabezeile zwischen zwei Accent grave (`)  steht,
  2023. wird  als  Kommando betrachtet und ausgeführt.  Die Ausgabe wird anstelle
  2024. der   in   Accent   grave  stehenden  Zeichenkette  in  die  Eingabezeile
  2025. eingesetzt. Dieses Verfahren wird als Command Substitution bezeichnet. 
  2026. Wenn  die  Ausgabe  des Kommandos über mehrere Zeilen geht,  wird nur die
  2027. erste  Zeile  (also die Ausgabe bis zum ersten Zeilenende)  benutzt.  Als
  2028. Zwischenspeicher  für  die  Ausgabe  des Kommandos wird eine Datei namens
  2029. $PIPDIR/csubXXXX  benutzt.   XXXX  ist hierbei eine laufende Nummer,  und
  2030. $PIPDIR  ist  das  Laufwerk,   über das auch die Pipelining-  Operationen
  2031. laufen. Diese Datei wird nach Verwendung gelöscht. 
  2032.  
  2033. Beispiele: 
  2034.  
  2035. Speichern der Shellflags: 
  2036.  
  2037.                               SET=`set -` 
  2038.  
  2039. Wiederherstellen mit: 
  2040.  
  2041.                                 set $SET 
  2042.  
  2043. Anzeigen einer Datei,  die in demselben Ordner liegt wie $FILE1, die aber
  2044. denselben Basisnamen wie $FILE2 hat: 
  2045.  
  2046.                  cat `dirname $FILE1`/`basename $FILE2` 
  2047.  
  2048. Löschen der ältesten Datei mit Nachfrage: 
  2049.  
  2050.                              rm -i `ls -t` 
  2051.  
  2052. ----------------------------------------------------------------------------
  2053.  
  2054.  
  2055.  
  2056. ENVIRONMENT
  2057.  
  2058. Die Okami-Shell bietet die Möglichkeit,  Definitionen von Shell-Variablen
  2059. in  das  Environment zu übernehmen.  Diese Definitionen werden dann allen
  2060. gestarteten  Programmen  übergeben.  Mit  dem  internen  Kommando  export
  2061. können  beliebige  Shellvariablen  in  das  Environment  ausgenommen oder
  2062. daraus entfernt werden. 
  2063.  
  2064. In  der  Basepage  eines  Programms  steht ab Offset 0x2c die Adresse des
  2065. Environment-Strings. Diese Adresse wird berechnet als: 
  2066.  
  2067.         char *BaseAdr;
  2068.         char *EnvAdr;
  2069.         EnvAdr = *(char **)(BaseAdr+0x2c);
  2070.  
  2071. BaseAdr  ist  die  Adresse  der Basepage (wird irgendwie vom Compiler zur
  2072. Verfügung gestellt). EnvAdr ist dann die Adresse des Environment-Strings.
  2073. Dieser String hat folgende Syntax: 
  2074.  
  2075.         EnvString       ::=  { VarDefinition } "\0"
  2076.         VarDefinition   ::= VarName "=" VarWert "\0"
  2077.  
  2078. Beispiel: 
  2079.  
  2080.            "a=Variable a\0b=Variable b\0usw=undsoweiter\0\0" 
  2081.  
  2082. Es werden folgende Variablen gesetzt: 
  2083.         a   auf  "Variable a"
  2084.         b   auf  "Variable b"
  2085.         usw auf  "undsoweiter"
  2086.  
  2087.  
  2088. ----------------------------------------------------------------------------
  2089.  
  2090.  
  2091.  
  2092. MINT-UNTERSTÜTZUNG
  2093.  
  2094. Die     Okami-Shell     benutzt     und     unterstützt     MiNT,     das
  2095. Multitasking-Betriebssystem  für TOS-Rechner.  Wenn MiNT installiert ist,
  2096. dann: 
  2097.  
  2098.    * meldet die Shell sich als MiNT-Domain-Prozess an. 
  2099.  
  2100.    * wird die Shellvariable NULL als u:/dev/null voreingestellt. 
  2101.  
  2102.    * wird die MiNT-Signalverarbeitung verwendet.  Es können dann interne
  2103.    Kommandos  mit  Ctrl-C abgebrochen werden.  Mit Ctrl-\ wird die Shell
  2104.    abgebrochen. 
  2105.  
  2106.    * können mit `&' Hintergrundprozesse gestartet werden. 
  2107.  
  2108.    * wird  die Tastatureingabe des Zeileneditors mit Fselect abgewicklt,
  2109.    d.h. die Shell benötigt während der Eingabe praktisch keine CPU-Zeit.
  2110.  
  2111.  
  2112.    * liefert  das Kommando `ps'  eine formatierte Ausgabe der Dateien in
  2113.    u:/proc. 
  2114.  
  2115.    * liefert das Kommando `time' zusätzlich User- und Kernalzeiten. 
  2116.  
  2117.    * benutzt   das   Kommando  `sleep'   keine  Warteschleife,   sondern
  2118.    Systemaufrufe, um während des Wartens keine CPU-Zeit zu benötigen. 
  2119.  
  2120.    * beendet das Kommando `shutdown'  alle Prozesse, bevor es das System
  2121.    abschaltbereit erklärt. 
  2122.  
  2123.    * kann mit dem Kommando `ver -m' die Versionsnummer des installierten
  2124.    MiNT ermittelt werden. 
  2125.  
  2126.    * sind die folgenden Kommandos und Optionen nutzbar: 
  2127.            id      User- und Gruppennummer ermitteln
  2128.            kill    Signale an Prozesse senden
  2129.            ln      Links erzeugen
  2130.            ls -s   symbolische Links anzeigen
  2131.            tty     Terminalnamen ermitteln
  2132.  
  2133.  
  2134. ----------------------------------------------------------------------------
  2135.  
  2136.  
  2137.  
  2138. GRÜSSE
  2139.  
  2140. 1) An  die  Firma  GRP in Aachen,  für lebenswichtige Kenntnisse in C und
  2141. Unix. 
  2142.  
  2143. 2) Für  die Begleitung in zahllosen Stunden voller Lust und Frust vor der
  2144. flimmerfreien Flimmerkiste:  Mike Oldfield,  The Beatles, Little Richard,
  2145. Bill  Haley,  Tommy Roe,  Lesley Gore,  Pat Boone,  Elvis Presley,  Chuck
  2146. Berry,  Del Shannon,  Chris Montez,  Billy Joe Royal,  The Box Tops,  The
  2147. Cascades,  Trini Lopez, Chris Andrews, Mary Hopkins, The Tremoloes, Bobby
  2148. Vee,  The Kinks, The Turtles, The Swinging Blue Jeans, Shane Fenton & The
  2149. Fentones,  The Piltdown Men,  Helen Shapiro, Cliff Richard, The Cowsills,
  2150. Jerry  Lee  Lewis,  Melanie,  Buddy  Hollie,  The  Lovin'  Spoonful,  The
  2151. Crystals, The Knickerbockers, The Crests, Every Mother's Son, The Shangri
  2152. Las, Bernard Cribbins, The Shadows, Frank Ilfield u.v.a. 
  2153.  
  2154.  
  2155.  
  2156.  
  2157.  
  2158.  
  2159.  
  2160.  
  2161.  
  2162. Atari ST,  GEM,  Unix, MS-Dumpf usw. sind eingetragene Warenzeichen von -
  2163. ach das wißt Ihr schon? Na gut. 
  2164.  
  2165. Diese  Anleitung  wurde  ursprünglich  als reine Ascii-Datei geschrieben,
  2166. dann   in  eine  Tempus-Word-Datei  umgeformt  und  wegen  der  absoluten
  2167. Unfähigkeit von Tempus Word,  Texte vernünftig formatiert als Ascii-Datei
  2168. auszugeben, in nroff umgeschrieben und mit "miniroff" formatiert. 
  2169.